이번 편의 목표: for와 range로 합계와 건수를 계산합니다.
지출 세 건을 더할 때는 `4500 + 8000 + 3200`으로 충분합니다. 지출이 삼백 건이라면 어떨까요? 데이터가 늘어날 때마다 코드도 길어지는 구조는 유지하기 어렵습니다. 반복문은 같은 처리 방법을 여러 값에 적용하게 해 줍니다.
하나씩 꺼내어 처리한다
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편의 조건문을 반복문 안에 넣으면 됩니다.
해설
total = 0
for number in range(1, 11):
if number % 2 == 0:
total += number
print(total)결과는 `30`입니다. 반복문 안에 조건문이 있으므로 더하는 줄은 두 단계 들여씁니다. 처음에는 `print(number, total)`을 반복 안에 넣어 누적되는 과정을 관찰해도 좋습니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
등록된 댓글이 없습니다.