01
for는 값을 하나씩 꺼낸다
for는 여러 값이나 range가 만든 숫자를 차례대로 변수에 넣어 같은 코드 블록을 실행합니다. 반복마다 변수에는 다음 값이 들어갑니다.
일상에서 보면출석부의 이름을 위에서부터 한 명씩 읽는 과정과 같습니다.
for number in [3, 5, 8]:
print(number * 2)
한 줄씩 보기- 목록의 첫 값 3을 number에 넣습니다.
- 들여쓴 계산을 실행합니다.
- 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부터 5 직전까지 만듭니다.
- 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)
한 줄씩 보기- 합계와 통과 개수를 0으로 준비합니다.
- 모든 점수를 합계에 더합니다.
- 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)
한 줄씩 보기- 가능한 점수보다 작은 값으로 시작합니다.
- 각 점수를 현재 최고점과 비교합니다.
- 더 클 때만 최고점을 교체합니다.
직접 값 바꾸기모든 값이 음수일 수 있다면 초기값을 어떻게 정할지 생각해 보세요.
흔한 실수highest를 무조건 새 값으로 바꾸면 마지막 값만 남습니다.
짧은 확인최고 기록은 어떤 조건에서 갱신해야 할까요?
05
while은 조건이 참인 동안 반복한다
반복 횟수를 미리 모를 때 while을 사용합니다. 반복 안에서 조건에 쓰인 값을 반드시 바꾸어야 끝날 수 있습니다. break는 즉시 반복을 끝내고 continue는 다음 반복으로 넘어갑니다.
일상에서 보면번호표가 남아 있는 동안 손님을 받고, 마감 신호가 오면 창구를 닫는 과정입니다.
count = 3
while count > 0:
print(count)
count -= 1
print('시작')
한 줄씩 보기- count가 0보다 큰 동안 반복합니다.
- 현재 값을 출력합니다.
- 매번 1을 빼 종료 조건에 다가갑니다.
직접 값 바꾸기count -= 1을 지우면 왜 끝나지 않는지 설명해 보세요.
흔한 실수조건 변수를 바꾸지 않으면 무한 반복이 되어 실행 제한에 걸립니다.
짧은 확인반복 횟수를 정확히 알고 있을 때 for와 while 중 무엇이 더 읽기 쉬울까요?