티스토리 뷰



 

Do it! 자료구조와 함께 배우는 알고리즘 입문 파이썬편

 

 

 

  • 어떤 조건이 성립하는 동안 반복해서 처리(프로그램 명령문 또는 명령어의 집합)하는 것을 반복구조 repetition structure, 루프 loop
    while 조건식 : 명령문(루프 본문)
# [Do it! 실습 1-7] 1부터 n까지 정수의 합 구하기 1(while 문)

print('1부터 n까지 정수의 합을 구합니다.')
n = int(input('n값을 입력하세요.: '))

sum = 0
i = 1

while i <= n:  # i가 n보다 작거나 같은 동안 반복
    sum += i   # sum에 i를 더함
    i += 1     # i에 1을 더함

print(f'1부터 {n}까지 정수의 합은 {sum}입니다.')
  • 합을 저장하는 sum 값을 0으로, 반복을 제어하는 i 값을 1로 초기화
    반복을 제어할 때 사용하는 i를 카운터용 변수라고 한다.
  • 변수가 하나만 있을 때는 while문보다 for문을 사용하는 것이 좋다.
# [Do it! 실습 1-8] 1부터 n까지의 합 구하기 2(for 문)

print('1부터 n까지의 합을 구합니다.')
n = int(input('n값을 입력하세요.: '))

sum = 0
for i in range(1, n + 1):
    sum += i  # sum에 i를 더함

print(f'1부터 {n}까지 정수의 합은 {sum}입니다.')
  • range()함수는 이터러블 객체를 생성한다.
    range(a,b,step) : a이상 b미만인 수를 step간격으로 나열하는 수열
  • 이터러블 객체 : 반복할 수 있는 객체
    for~in문에 사용할 수 있다. 대표적인 이터러블 자료형으로 파이썬에 list, str, tuple 이 있다
    for i in range(a,b)는 [a, a+1, ... , b-1]이라는 이터러블 객체를 생성하고, 이터러블 객체의 값을 하나씩 꺼내 i에 넣어 반복한다.
# [Do it! 실습 1-9] a부터 b까지 정수의 합 구하기(for 문)

print('a부터 b까지의 합을 구합니다.')
a = int(input('정수 a를 입력하세요.: '))
b = int(input('정수 b를 입력하세요.: '))

if a > b:
    a, b = b, a  # a와 b를 오름차순으로 정렬

sum = 0
for i in range(a, b + 1):
    sum += i  # sum에 i를 더함

print(f'{a}부터 {b}까지 정수의 합은 {sum}입니다.')
    a, b = b, a  # a와 b의 값을 교환(단일 대입문 사용)
  • 두 값 교환하기 1
    우변의 b, a에 의해 두 값을 압축한 튜플 (b,a)가 생성된다 → 대입할 때 튜플 (b,a)를 다시 풀어 b,a로 만든 다음 각각 a와 b에 대입한다.
  • 두 값 교환하기2
    또는 임시용 변수 t를 이용하여 두 값을 교환할 수 있다.
    a값을 t에 저장한다 → b값을 a에 대입한다 → t에 저장한 처음 a값을 b에 대입한다.
while True:
    n = int(input('n값을 입력하세요.: '))
    if n > 0:
        break  # n이 0보다 커질 때까지 반복
  • while문의 조건식에 True가 사용되었다.
    프로그래머가 의도적으로 while문이 무한 반복되도록 만든 것이며 무한 루프 infinite loop라고 한다.
  • 반복문 안에서 break 문을 실행하면 반복문을 종료할 수 있다.
  • 대부분 프로그래밍 언어에서, 한 번 실행한 다음 계속 반복할지 판단하는 사후판단 반복문을 지원한다.
    do ~while문, repeat~until문
    파이썬은 사후판단 반복문을 제공하지 않는다. break를 사용하여 양수를 입력받는 프로그램을 만들어야 한다.
# [Do it! 실습 1-17] 가로 세로가 정수이고 넓이가 area인 직사각형에서 변의 길이를 나열하기

area = int(input('직사각형의 넓이를 입력하세요.: '))

for i in range(1, area + 1):  # 1부터 사각형의 넓이 계산
    if i * i > area: break
    if area % i: continue
    print(f'{i} × {area // i}')
# [Do it! 실습 1-18] 10~99 사이의 난수 n개 생성하기(13이 나오면 중단)

import random

n = int(input('난수의 개수를 입력하세요.: '))

for _ in range(n):
    r = random.randint(10, 99)
    print(r, end=' ')
    if r == 13:
        print('\n프로그램을 중단합니다.')
        break
else :
    print('\n난수 생성을 종료합니다.')
  • break : else문을 포함하여 반복문을 강제로 종료시킨다.
  • continue : 반복문에서 continue문이 실행되면 루프 본문의 나머지 부분을 건너뛰고 조건식으로 돌아간다.
  • else : while문이나 for문 등 반복문의 끝부분에 else문을 둘 수 있다. else문은 조건식에 의해 반복문이 종료되는 경우 실행된다.
    (break문이 실행되지 않았을 때에만 실행)
>>> n = 17
>>> id(17)
4316146480
>>> id(n)
4316146480
  • 파이썬의 변수
    파이썬에서는 데이터, 함수, 클래스, 모듈, 패키지 등을 모두 객체 object로 취급한다.
    객체는 자료형 data type 을 가지고 메모리(저장공간)을 차지한다.
    파이썬의 이런 특징 때문에 파이썬의 변수는 값을 갖지 않는다는 특징이 있다.
    보통 프로그래밍 언어에서 변수는 값을 저장하는 상자와 같다고 비유하는데, 파이썬에서는 이 비유가 알맞지 않다.
    상자라는 표현을 사용하여 정리하면, 17이라는 int형 객체 자체가 상자라고 할 수 있다. 변수는 단순한 이름에 불과하다.
  • 파이썬의 변수는 객체를 참조하는 객체에 연결된 이름에 불과하다.
  • 모든 객체는 메모리를 차지하고, 자료형뿐만 아니라 식별번호 identity 를 가진다.
  • 정수 리터럴 17의 식별번호와 n의 식별번호가 같다.
  • 리터럴(literal)이란 값 자체를 의미한다. 문자 자체에 의해 값이 주어지는 문자열. 숫자 리터럴 7은 7의 값을 가지며, 문자 리터럴 CHARACTERS는 CHARACTERS의 값을 가진다.
  • n의 값을 17이 아닌 다른 값으로 갱신하면 새로운 값을 갖는 개체가 생성되고, 그 값을 n이 참조한다. n의 식별번호 역시 갱신된다.
  • 전역변수, 지역변수 모두 객체를 참조하는 이름에 불과하다.

 

출처 : Do it ! 자료구조와 함께 배우는 알고리즘 입문 파이썬편

반응형
댓글