edubun
한국어

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 10

for 줄은 리스트의 항목을 하나씩 꺼냅니다. 한 바퀴 돌 때마다 변수 n이 다음 항목을 가리키고, 아래 들여 쓴 줄들이 그 값으로 한 번 실행됩니다. 마지막 항목까지 돌고 나면 들여쓰기가 없는 다음 줄로 넘어가므로 "done"은 맨 끝에 한 번만 출력됩니다. 추적표로 그려 보면 규칙이 바로 보입니다.

바퀴n이 바퀴 뒤 total출력
(시작 전)0
1333 3
2585 8
32102 10
(끝난 뒤)10done 10
한 바퀴마다 다음 항목이 n에 들어가고 total에 더해집니다. 누적 합계는 반복문에서 가장 흔한 모양입니다.

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 = 63

for 반복문은 문자열의 글자도 하나씩 꺼낼 수 있어서 글자 세기가 쉬워집니다.

count = 0
for ch in "banana":
    if ch == "a":
        count += 1
print(count)
출력
3

while은 조건이 True인 동안 되풀이합니다

while 반복문에는 꺼낼 리스트가 없습니다. 조건을 확인해서 True이면 들여 쓴 줄을 실행하고, 다시 조건을 확인하기를 되풀이합니다. 「모은 돈이 5만 원이 될 때까지 계속 저금한다」처럼 몇 번 돌지 미리 모를 때 알맞습니다. 반복문 안에서 조건이 바뀌는 무언가가 반드시 있어야 하고, 그렇지 않으면 끝나지 않습니다. 그럴 때는 Ctrl+C로 프로그램을 멈추세요.

saved = 0
weeks = 0
while saved < 50000:
    saved += 12000
    weeks += 1
print(weeks, saved)
출력
5 60000

break는 반복문 한가운데서라도 곧바로 빠져나옵니다. 무언가를 찾다가 찾자마자 멈추고 싶을 때 씁니다. 아래 반복문은 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반복문을 곧바로 빠져나옴
  1. 무엇이 출력될까요?
    for i in range(3):
        print(i)
    • 0
      1
      2
    • 1
      2
      3
    • 0
      1
      2
      3
    • 3
  2. 무엇이 출력될까요?
    total = 0
    for n in range(1, 5):
        total += n
    print(total)
  3. 무엇이 출력될까요?
    print(list(range(0, 10, 3)))
  4. 무엇이 출력될까요?
    total = 0
    for n in [1, 2, 3]:
        total += n
        print(total)
    • 6
    • 1
      3
      6
    • 1
      2
      3
    • 0
      1
      3
  5. 무엇이 출력될까요?
    count = 0
    for ch in "seoul":
        if ch in "aeiou":
            count += 1
    print(count)
  6. 무엇이 출력될까요?
    n = 1
    while n < 20:
        n = n * 2
    print(n)
  7. 무엇이 출력될까요?
    for s in [5, 8, 3, 9]:
        if s > 6:
            print(s)
            break
  8. hi가 몇 번 출력될까요?
    for i in range(2, 8):
        print("hi")
  9. 무엇이 출력될까요?
    word = ""
    for ch in "abc":
        word = ch + word
    print(word)
  10. 1부터 100까지의 합이 출력되도록 줄을 순서대로 놓으세요.
    출력
    5050
자주 하는 실수
  • 「range(1, 10)은 10까지 간다.」 10 바로 앞에서 멈추므로 마지막 값은 9입니다. 1부터 10까지라면 range(1, 11)이라고 씁니다.
  • 「while문이 오래 걸릴 뿐 잘 돌고 있다.」 반복문 안에서 조건을 바꾸는 것이 없으면 영원히 끝나지 않습니다. 조건에 쓴 변수가 바퀴마다 바뀌는지 확인하고, 멈추지 않는 반복문은 Ctrl+C로 끄세요.
  • 「print를 반복문 안에 두든 밖에 두든 같다.」 for 아래 들여 쓰면 바퀴마다 실행되고, 들여쓰기 없이 쓰면 반복이 끝난 뒤 한 번 실행됩니다. 단계마다 보고 싶은지, 마지막 답만 보고 싶은지에 따라 고르세요.
선생님 메모설명보다 실행을 먼저 하게 하고, 그다음 칠판에서 추적표를 함께 채우세요. 「들여 쓴 줄이 항목마다 한 번씩 실행된다」는 말이 표를 채우면서 손에 잡힙니다. 자주 틀리는 곳은 range()의 끝 값과 마지막 print의 들여쓰기 두 군데입니다. while문은 실행하기 전에 「언젠가 조건을 False로 만드는 줄이 어디냐」고 묻고 그 줄을 짚게 하세요. 구구단 7단은 학생들이 답을 이미 외우고 있어서 출력이 맞는지 한눈에 확인할 수 있고, 첫 반복문 과제로 자신감을 주기에 좋습니다. 정보 시간에 배우는 반복 구조와 같은 내용입니다.
핵심 정리
  • 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