본문 바로가기

변수·조건·반복으로 상태 읽기

값의 변화와 if·for·while의 실행 순서를 추적합니다.

알고리즘은 답만 출력하는 마술이 아니라 상태를 바꾸는 순서입니다. 이 본문의 목표는 변수의 현재 값이 무엇인지 적으면서 조건과 반복을 읽는 것입니다. 첫 본문의 파일 실행만 준비하면 됩니다.

개념과 약속

변수는 값을 가리키는 이름입니다. count = count + 1은 수학의 등식이 아니라, 오른쪽을 현재 값으로 계산한 뒤 새 값을 연결하는 대입입니다. ==는 같은지 비교하고 =는 대입합니다. if는 참일 때 들여쓴 코드를 실행합니다. for는 순서대로 원소를 꺼내고, while은 조건이 참인 동안 반복합니다.

range(5)는 0, 1, 2, 3, 4입니다. 끝 5를 포함하지 않는 반열린 범위를 기억하세요. range(1, 6)은 1부터 5까지입니다. 같은 블록은 같은 수의 공백으로 들여씁니다. Python에서는 이 들여쓰기가 문장 묶음을 결정합니다.

손으로 상태 추적하기

꺼낸 nn이 홀수인가누적 total누적 count
1참11
2거짓11
3참42
4거짓42
5참93

n % 2는 2로 나눈 나머지입니다. 나머지가 1이면 이 범위의 양의 정수는 홀수입니다.

직접 실행하기

아래 코드는 이 본문만으로 실행할 수 있습니다. lesson.py로 저장하고 첫 장에서 확인한 Python 명령으로 실행하세요.

total = 0
count = 0
for n in range(1, 6):
    if n % 2 == 1:
        total += n
        count += 1
print(total, count)

remaining = 3
while remaining > 0:
    print(remaining)
    remaining -= 1

실행 결과:

9 3
3
2
1

왜 맞고 언제 끝나는가

반복이 한 원소를 처리할 때마다 total은 지금까지 본 홀수의 합이고 count는 그 개수입니다. 이 사실이 각 단계에서 유지됩니다. for는 다섯 원소가 끝나면 종료합니다. 아래 while에서는 remaining이 매번 1씩 줄어 0이 되므로 끝납니다.

비용과 적용 범위

범위 끝을 n으로 늘리면 검사 횟수가 n에 비례합니다. 여기서 %, 비교, 작은 정수 덧셈을 한 단계로 세는 간단한 모델을 사용합니다. 값을 계속 복사해 별도 목록을 만들지 않아 변수 개수는 일정합니다.

스스로 풀어 보기

  1. 범위를 range(1, 8)로 바꾸면 합과 개수는 무엇인가요?
  2. remaining -= 1을 지우면 무엇이 달라지나요? 실행하기 전 종료 여부부터 판단하세요.

힌트

  1. 7을 포함하며 새 홀수는 7입니다.
  2. while 조건을 바꾸는 값이 있는지 살핍니다.

해설

  1. 홀수 1, 3, 5, 7의 합은 16이고 개수는 4입니다.
  2. remaining이 3에 머물러 반복이 끝나지 않습니다. 실수로 실행했다면 터미널의 Ctrl+C로 중단할 수 있습니다.

흔한 오해

range의 끝값도 실행한다고 생각하면 개수를 하나 더 세게 됩니다. 한 번도 반복하지 않는 range(0)과 처음부터 거짓인 while도 정상적인 경계 입력입니다.

복습과 다음 연결

다음 절에서는 함수와 리스트로 이 반복을 다시 쓸 수 있는 단위로 묶습니다.