이번 편의 목표: for와 range로 합계와 건수를 계산합니다.

지출 세 건을 더할 때는 `4500 + 8000 + 3200`으로 충분합니다. 지출이 삼백 건이라면 어떨까요? 데이터가 늘어날 때마다 코드도 길어지는 구조는 유지하기 어렵습니다. 반복문은 같은 처리 방법을 여러 값에 적용하게 해 줍니다.

하나씩 꺼내어 처리한다

Python
amounts = [4500, 8000, 3200]
total = 0
count = 0

for amount in amounts:
    total += amount
    count += 1
    print(f"{count}번째 지출: {amount:,}원")

print(f"총 {count}건, {total:,}원")

for day in range(1, 4):
    print(f"{day}일 차 공부")

`amounts`는 여러 값을 담은 목록입니다. 목록을 수정하는 방법은 9편에서 다룹니다. `for amount in amounts:`는 그 목록에서 하나씩 꺼내 `amount`라는 이름으로 처리하겠다는 뜻입니다. 총액은 `15,700원`, 건수는 `3`입니다.

`total = 0`을 반복문 밖에 적은 이유가 중요합니다. 반복문 안에서 매번 0으로 바꾸면 지금까지 더한 결과가 사라집니다. 누적에 필요한 초기값은 반복 전에 준비하고, 반복 안에서는 갱신합니다.

range의 끝은 포함하지 않는다

`range(1, 4)`는 1, 2, 3을 만듭니다. `range(4)`는 0, 1, 2, 3입니다. `range(2, 10, 2)`처럼 세 번째 인수로 간격도 지정할 수 있습니다. 간격을 0으로 쓰면 오류가 납니다.

`range`는 반복에 사용할 정수 범위를 표현합니다. 반복할 때마다 거대한 목록을 먼저 만들어야 하는 방식은 아닙니다. 처음에는 이 내부 구조보다 시작·끝·간격을 정확하게 읽는 것이 우선입니다.

문자열도 반복할 수 있습니다. `for letter in "Python":`이라고 쓰면 한 글자씩 처리합니다. 한 번에 다루는 값이 무엇인지 생각하면 반복문을 읽기가 쉬워집니다.

반복의 안과 밖을 구별하자

반복문 안의 출력은 지출마다 한 번씩 실행됩니다. 반복문 밖의 총액 출력은 모든 처리가 끝난 뒤 한 번 실행됩니다. 합계가 중간중간 여러 번 출력된다면 수식보다 들여쓰기를 먼저 살펴보세요.

빈 목록이면 반복문 본문은 한 번도 실행되지 않습니다. 위 코드에서는 미리 0으로 초기화했으므로 결과는 0건, 0원입니다. 빈 자료에서도 결과가 자연스러운지는 프로그램을 점검하는 좋은 기준입니다.

직접 해 보기

1부터 10까지의 정수 중 짝수만 더하세요. `%`로 나머지를 구하고 6편의 조건문을 반복문 안에 넣으면 됩니다.

해설

Python
total = 0
for number in range(1, 11):
    if number % 2 == 0:
        total += number
print(total)

결과는 `30`입니다. 반복문 안에 조건문이 있으므로 더하는 줄은 두 단계 들여씁니다. 처음에는 `print(number, total)`을 반복 안에 넣어 누적되는 과정을 관찰해도 좋습니다.