이 모듈의 도달 목표

반복으로 데이터 모으기

for와 while로 여러 입력을 처리하고 누적값·개수·최댓값을 안전하게 계산합니다.

결과물 · 학습 기록 요약기
약 4~6시간
  • for와 while을 상황에 맞게 선택한다
  • range의 시작·끝·간격과 경계값을 추적한다
  • 합계·개수·최댓값 누적 패턴을 구현한다
  • 무한 반복과 off-by-one 오류를 찾아 수정한다
01

for는 값을 하나씩 꺼낸다

for는 여러 값이나 range가 만든 숫자를 차례대로 변수에 넣어 같은 코드 블록을 실행합니다. 반복마다 변수에는 다음 값이 들어갑니다.

일상에서 보면출석부의 이름을 위에서부터 한 명씩 읽는 과정과 같습니다.
for number in [3, 5, 8]:
    print(number * 2)
실행 결과
6
10
16
한 줄씩 보기
  1. 목록의 첫 값 3을 number에 넣습니다.
  2. 들여쓴 계산을 실행합니다.
  3. 5와 8에도 같은 과정을 반복합니다.
직접 값 바꾸기값 하나를 더 추가하고 출력 줄 수도 하나 늘어나는지 확인하세요.
흔한 실수for 아래 실행할 코드를 들여쓰지 않으면 반복 블록이 만들어지지 않습니다.

짧은 확인세 값을 반복하면 들여쓴 print는 몇 번 실행될까요?

02

range의 끝값은 포함되지 않는다

range(start, stop, step)은 start부터 시작해 stop 직전까지 step만큼 이동합니다. N까지 포함하려면 stop에 N + 1을 사용합니다.

일상에서 보면3층 직전까지 올라가는 엘리베이터 지시는 1층과 2층에서만 멈추는 것과 같습니다.
print(list(range(1, 5)))
print(list(range(0, 7, 2)))
실행 결과
[1, 2, 3, 4]
[0, 2, 4, 6]
한 줄씩 보기
  1. 1부터 5 직전까지 만듭니다.
  2. 0부터 7 직전까지 2칸씩 이동합니다.
직접 값 바꾸기range(5, 0, -1)로 거꾸로 세어 보세요.
흔한 실수range(1, n)은 n을 포함하지 않아 마지막 값이 빠지는 off-by-one 오류를 만들 수 있습니다.

짧은 확인1부터 10까지 포함하려면 range의 끝값은 무엇이어야 할까요?

03

합계와 개수는 반복 전에 준비한다

합계 total과 개수 count는 반복 전에 0으로 시작하고, 조건에 맞는 값을 만날 때 갱신합니다. 반복 안에서 0으로 초기화하면 앞선 결과가 사라집니다.

일상에서 보면장바구니 합계와 물건 수를 장보기 전에 0으로 적고 물건을 담을 때마다 더하는 과정입니다.
total = 0
count = 0
for score in [80, 60, 90]:
    total += score
    if score >= 70:
        count += 1
print(total, count)
실행 결과
230 2
한 줄씩 보기
  1. 합계와 통과 개수를 0으로 준비합니다.
  2. 모든 점수를 합계에 더합니다.
  3. 70 이상인 점수만 개수를 늘립니다.
직접 값 바꾸기70점을 추가해 경계값이 통과 개수에 포함되는지 확인하세요.
흔한 실수total = 0을 반복 안에 두면 매번 현재 값만 남습니다.

짧은 확인개수를 세는 count는 언제 1 증가해야 할까요?

04

최댓값은 지금까지의 기록과 비교한다

새 값을 읽을 때마다 지금까지의 highest보다 큰지 비교해 갱신합니다. 입력이 0 이상이라면 -1처럼 가능한 값보다 작은 초기값으로 시작할 수 있습니다.

일상에서 보면경기마다 최고 기록표와 비교해 더 좋은 기록일 때만 표를 바꾸는 과정입니다.
highest = -1
for score in [72, 95, 88]:
    if score > highest:
        highest = score
print(highest)
실행 결과
95
한 줄씩 보기
  1. 가능한 점수보다 작은 값으로 시작합니다.
  2. 각 점수를 현재 최고점과 비교합니다.
  3. 더 클 때만 최고점을 교체합니다.
직접 값 바꾸기모든 값이 음수일 수 있다면 초기값을 어떻게 정할지 생각해 보세요.
흔한 실수highest를 무조건 새 값으로 바꾸면 마지막 값만 남습니다.

짧은 확인최고 기록은 어떤 조건에서 갱신해야 할까요?

05

while은 조건이 참인 동안 반복한다

반복 횟수를 미리 모를 때 while을 사용합니다. 반복 안에서 조건에 쓰인 값을 반드시 바꾸어야 끝날 수 있습니다. break는 즉시 반복을 끝내고 continue는 다음 반복으로 넘어갑니다.

일상에서 보면번호표가 남아 있는 동안 손님을 받고, 마감 신호가 오면 창구를 닫는 과정입니다.
count = 3
while count > 0:
    print(count)
    count -= 1
print('시작')
실행 결과
3
2
1
시작
한 줄씩 보기
  1. count가 0보다 큰 동안 반복합니다.
  2. 현재 값을 출력합니다.
  3. 매번 1을 빼 종료 조건에 다가갑니다.
직접 값 바꾸기count -= 1을 지우면 왜 끝나지 않는지 설명해 보세요.
흔한 실수조건 변수를 바꾸지 않으면 무한 반복이 되어 실행 제한에 걸립니다.

짧은 확인반복 횟수를 정확히 알고 있을 때 for와 while 중 무엇이 더 읽기 쉬울까요?

1부터 N까지 더하기

  1. N을 정수로 받습니다.
  2. total을 0으로 준비합니다.
  3. 1부터 N까지 반복합니다.
  4. 각 숫자를 누적하고 경계값 1을 확인합니다.
n = int(input())
total = 0
for number in range(1, n + 1):
    total += number
print(total)

핵심을 확인해 볼까요?

5문항 중 4문항 이상 정답이면 완료됩니다. 오답 후에도 다시 제출할 수 있습니다.

1range(1, 4)가 만드는 수는?
2합계를 누적하기 전 total의 알맞은 시작값은?
3반복 횟수를 미리 모를 때 자주 쓰는 것은?
4반복 안에서 total = 0을 실행하면 생기는 문제는?
5while 반복이 끝나지 않는 가장 흔한 이유는?