for와 while로 반복하기
range(5)는 0, 1, 2, 3, 4를 만듭니다. 수는 다섯 개이고, 5는 들어 있지 않습니다.
세 줄짜리 반복문을 실행하고 total이 커지는 것을 봅니다
설명을 읽기 전에 이 프로그램을 IDLE에 옮겨 적고 실행해 보세요. 그다음 리스트 안의 수를 마음대로 바꿔서 한 번 더 실행해 보세요.
total = 0
for n in [3, 5, 2]:
total = total + n
print(n, total)
print("done", total)3 3
5 8
2 10
done 10for 줄은 리스트의 항목을 하나씩 꺼냅니다. 한 바퀴 돌 때마다 변수 n이 다음 항목을 가리키고, 아래 들여 쓴 줄들이 그 값으로 한 번 실행됩니다. 마지막 항목까지 돌고 나면 들여쓰기가 없는 다음 줄로 넘어가므로 "done"은 맨 끝에 한 번만 출력됩니다. 추적표로 그려 보면 규칙이 바로 보입니다.
| 바퀴 | n | 이 바퀴 뒤 total | 출력 |
|---|---|---|---|
| (시작 전) | 0 | ||
| 1 | 3 | 3 | 3 3 |
| 2 | 5 | 8 | 5 8 |
| 3 | 2 | 10 | 2 10 |
| (끝난 뒤) | 10 | done 10 |
total처럼 반복문 전에 0으로 시작해서 바퀴마다 값을 모으는 변수를 누적 변수라고 부릅니다. total = total + n은 워낙 자주 써서 total += n이라는 줄임 꼴이 있습니다. 개수를 셀 때도 count += 1로 똑같이 합니다.
range()가 수를 만들어 줍니다
정해진 횟수만큼 되풀이하려면 range()를 씁니다. range(5)는 0, 1, 2, 3, 4를 만듭니다. 슬라이스처럼 0에서 시작해 5 바로 앞에서 멈춥니다. range(1, 6)은 1부터 5까지, 셋째 수를 넣으면 간격이 되어 range(0, 10, 2)는 0부터 8까지의 짝수입니다. 초등학교 때 외운 구구단 7단도 두 줄짜리 반복문입니다.
for i in range(1, 10):
print(7, "x", i, "=", 7 * i)7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63for 반복문은 문자열의 글자도 하나씩 꺼낼 수 있어서 글자 세기가 쉬워집니다.
count = 0
for ch in "banana":
if ch == "a":
count += 1
print(count)3while은 조건이 True인 동안 되풀이합니다
while 반복문에는 꺼낼 리스트가 없습니다. 조건을 확인해서 True이면 들여 쓴 줄을 실행하고, 다시 조건을 확인하기를 되풀이합니다. 「모은 돈이 5만 원이 될 때까지 계속 저금한다」처럼 몇 번 돌지 미리 모를 때 알맞습니다. 반복문 안에서 조건이 바뀌는 무언가가 반드시 있어야 하고, 그렇지 않으면 끝나지 않습니다. 그럴 때는 Ctrl+C로 프로그램을 멈추세요.
saved = 0
weeks = 0
while saved < 50000:
saved += 12000
weeks += 1
print(weeks, saved)5 60000break는 반복문 한가운데서라도 곧바로 빠져나옵니다. 무언가를 찾다가 찾자마자 멈추고 싶을 때 씁니다. 아래 반복문은 60점 미만인 첫 점수에서 멈추고, 88은 확인하지도 않습니다.
for s in [72, 91, 55, 88]:
if s < 60:
print("first below 60:", s)
break
print("ok", s)ok 72
ok 91
first below 60: 55| for x in ... | 항목마다 한 번씩 들여 쓴 줄을 실행 |
| range(a, b) | a부터 b 바로 앞까지의 정수 |
| while | 조건이 True인 동안 되풀이 |
| 누적 변수 | 바퀴마다 합계를 모으는 변수 |
| += | total += n은 total = total + n의 줄임 |
| break | 반복문을 곧바로 빠져나옴 |
- 무엇이 출력될까요?
for i in range(3): print(i)0
1
21
2
30
1
2
33
- 무엇이 출력될까요?
total = 0 for n in range(1, 5): total += n print(total) - 무엇이 출력될까요?
print(list(range(0, 10, 3))) - 무엇이 출력될까요?
total = 0 for n in [1, 2, 3]: total += n print(total)61
3
61
2
30
1
3
- 무엇이 출력될까요?
count = 0 for ch in "seoul": if ch in "aeiou": count += 1 print(count) - 무엇이 출력될까요?
n = 1 while n < 20: n = n * 2 print(n) - 무엇이 출력될까요?
for s in [5, 8, 3, 9]: if s > 6: print(s) break - hi가 몇 번 출력될까요?
for i in range(2, 8): print("hi") - 무엇이 출력될까요?
word = "" for ch in "abc": word = ch + word print(word) - 1부터 100까지의 합이 출력되도록 줄을 순서대로 놓으세요.출력
5050
- 「range(1, 10)은 10까지 간다.」 10 바로 앞에서 멈추므로 마지막 값은 9입니다. 1부터 10까지라면 range(1, 11)이라고 씁니다.
- 「while문이 오래 걸릴 뿐 잘 돌고 있다.」 반복문 안에서 조건을 바꾸는 것이 없으면 영원히 끝나지 않습니다. 조건에 쓴 변수가 바퀴마다 바뀌는지 확인하고, 멈추지 않는 반복문은 Ctrl+C로 끄세요.
- 「print를 반복문 안에 두든 밖에 두든 같다.」 for 아래 들여 쓰면 바퀴마다 실행되고, 들여쓰기 없이 쓰면 반복이 끝난 뒤 한 번 실행됩니다. 단계마다 보고 싶은지, 마지막 답만 보고 싶은지에 따라 고르세요.
- for x in 리스트: 항목마다 들여 쓴 줄을 한 번씩 실행.
- range(a, b)는 b 바로 앞에서 멈추고, range(n)은 0부터 n - 1까지.
- 누적 변수는 반복문 전에 시작해서 안에서 커짐.
- while은 조건이 True인 동안 반복하고, 안에서 조건이 바뀌어야 함.
- break는 반복문을 곧바로 빠져나옴.
이 과정의 출처 (6)
- Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
- Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
- Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
- General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
- Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
- Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)
확인한 날: 2026-10-19