🌱
기초 (Basic)
for · range · while · break · continue · 중첩
5주차 — 반복문
for + range() 로 정해진 횟수, while 로 조건이 참인 동안, break/continue 로 흐름 제어, 그리고 중첩 반복문으로 구구단·별 찍기 같은 2차원 패턴을 출력합니다.
forwhilerangebreakcontinue
소요 시간
⏱ 2시간
난이도
📊 완전 초보
선수 조건
🎯 4주차
결과물
구구단·별 찍기·숫자 맞추기 게임을 직접 구현
이 강의에서 배우는 것
- 1for 와 range() 로 정해진 횟수만큼 반복한다
- 2while 로 조건이 참인 동안 반복한다
- 3break, continue 로 흐름을 제어한다
- 4중첩 반복문을 이해한다
1. for 반복문
range(시작, 끝, 간격) 으로 정수 시퀀스를 만들어 반복합니다. 끝값은 미포함.
python
for i in range(5): # 0, 1, 2, 3, 4
print(i)
for i in range(1, 11): # 1 ~ 10
print(i, end=" ")
for i in range(0, 10, 2): # 0, 2, 4, 6, 8
print(i)리스트나 문자열 같은 시퀀스를 직접 순회할 수도 있습니다 (다음 주차).
2. while 반복문
조건이 True 인 동안 계속 실행. 반드시 종료 조건이 변해야 합니다.
python
n = 1
while n <= 5:
print(n)
n += 1 # 이게 없으면 무한 루프!사용자 입력으로 종료 결정:
python
while True:
cmd = input("명령(quit으로 종료): ")
if cmd == "quit":
break
print(f"실행: {cmd}")3. break 와 continue
- break — 반복문 즉시 탈출
- continue — 이번 반복 건너뛰고 다음으로
python
for i in range(1, 11):
if i == 5:
continue # 5는 건너뛰기
if i == 8:
break # 8에서 종료
print(i, end=" ") # 1 2 3 4 6 74. 중첩 반복문
반복문 안의 반복문. 구구단·표 출력에 자주 사용.
python
for i in range(2, 10): # 2단~9단
for j in range(1, 10): # ×1 ~ ×9
print(f"{i} × {j} = {i*j}")
print() # 단 사이 공백5. 자주 하는 실수
1) 무한 루프
python
n = 1
while n <= 5:
print(n)
# n += 1 빠뜨림 → 무한히 1 출력→ Ctrl+C 로 강제 종료. 종료 조건이 변하는지 확인.
2) range(1, 10) 이 1~10이라고 착각
range(1, 10) 은 1~9 (10 미포함). 1~10 원하면 range(1, 11).
3) 들여쓰기 누락
python
for i in range(5):
print(i) # IndentationError4) break 가 모든 반복문을 빠져나간다고 오해
break 는 가장 가까운 반복문 하나만 빠져나갑니다. 다중 break은 플래그 변수 사용.
5) 반복 변수를 안에서 변경
python
for i in range(5):
i = 100 # 다음 반복에서 다시 0,1,2... 됨6. FAQ
Q1. for와 while 중 언제 뭘 쓰나요?
횟수가 정해져 있으면 for, 조건에 따라 끝나면 while. 사용자 입력 받기는 보통 while.
Q2. for ... else 문이 있다는데?
for 가 정상 종료(break 없이) 되면 else 가 실행됩니다. 입문 단계에서는 잘 안 씀.
Q3. 0부터 시작하는 이유는?
컴퓨터가 인덱스를 0부터 세는 관행. 사람에게 보여줄 땐 enumerate(seq, start=1) 로 1부터 시작 가능.
💻 예제 (examples)
실제로 실행해 결과를 확인할 수 있는 예제 코드입니다.
01_for_range.py— for + range 패턴 모음
CODE
# 0부터 4까지
for i in range(5):
print(i, end=" ")
print()
# 1부터 10까지
for i in range(1, 11):
print(i, end=" ")
print()
# 0부터 10까지 2씩 증가
for i in range(0, 11, 2):
print(i, end=" ")
print()
# 합계 구하기
total = 0
for i in range(1, 101):
total += i
print(f"1~100 합계: {total}")
▶ 실행 결과
0 1 2 3 4
1 2 3 4 5 6 7 8 9 10
0 2 4 6 8 10
1~100 합계: 505002_while.py— while 반복문 + 사용자 입력으로 종료
CODE
# 1~5 출력
n = 1
while n <= 5:
print(n, end=" ")
n += 1
print()
# 사용자 입력으로 종료
while True:
cmd = input("명령(quit으로 종료): ")
if cmd == "quit":
print("종료합니다")
break
print(f"실행: {cmd}")
▶ 실행 결과
1 2 3 4 5
명령(quit으로 종료): hello
실행: hello
명령(quit으로 종료): test
실행: test
명령(quit으로 종료): quit
종료합니다03_break_continue.py— break, continue + 짝수 찾기
CODE
# 1~10 중 5는 건너뛰고, 8에서 종료
for i in range(1, 11):
if i == 5:
continue
if i == 8:
break
print(i, end=" ")
print()
# 출력: 1 2 3 4 6 7
# 첫 번째 짝수만 찾기
for n in [3, 7, 11, 4, 9]:
if n % 2 == 0:
print(f"첫 번째 짝수: {n}")
break
▶ 실행 결과
1 2 3 4 6 7
첫 번째 짝수: 404_nested.py— 중첩 반복문으로 구구단
CODE
# 구구단 2~9단
for i in range(2, 10):
print(f"--- {i}단 ---")
for j in range(1, 10):
print(f"{i} × {j} = {i*j}")
print()
▶ 실행 결과
--- 2단 ---
2 × 1 = 2
2 × 2 = 4
... (생략)
2 × 9 = 18
--- 3단 ---
3 × 1 = 3
... (이하 동일)📝 과제 (exercises)
직접 풀어보고, 막힐 때 정답을 펼쳐 비교해보세요.
과제 1
구구단 (2~9단)
목표: 중첩 반복문으로 2단부터 9단까지 출력한다.
요구사항
- 외부 for 로 단(2~9), 내부 for 로 곱하기 수(1~9)
- 각 줄: "i × j = (결과)" 형식
- 단 사이 빈 줄로 구분
입출력 예시
2 × 1 = 2
2 × 2 = 4
...
9 × 9 = 81▶정답 코드 펼치기 / 접기
SOLUTION
for i in range(2, 10):
for j in range(1, 10):
print(f"{i} × {j} = {i*j}")
print()
▶ 실행 결과
2 × 1 = 2
2 × 2 = 4
...
2 × 9 = 18
3 × 1 = 3
...
9 × 9 = 81과제 2
별 찍기 (정삼각형 + 역삼각형)
목표: n 줄짜리 정삼각형과 역삼각형 별을 출력한다.
요구사항
- n 을 입력 받기 (예: 5)
- 정삼각형: 1, 2, 3, ..., n 개의 별
- 역삼각형: n, n-1, ..., 1 개의 별
입출력 예시
높이: 4
*
**
***
****
****
***
**
*▶정답 코드 펼치기 / 접기
SOLUTION
n = int(input("높이: "))
# 정삼각형
for i in range(1, n + 1):
print("*" * i)
# 역삼각형
for i in range(n, 0, -1):
print("*" * i)
▶ 실행 결과
높이: 4
*
**
***
****
****
***
**
*과제 3
숫자 맞추기 게임
목표: 1~100 사이 무작위 숫자를 사용자가 맞출 때까지 ↑/↓ 힌트를 제공한다.
요구사항
- random.randint(1, 100) 로 정답 생성
- while True 로 반복 입력
- 정답이 입력값보다 크면 "↑", 작으면 "↓", 같으면 종료 + 시도 횟수 표시
입출력 예시
숫자: 50
↑
숫자: 75
↓
숫자: 65
🎉 정답! (3번째 시도)▶정답 코드 펼치기 / 접기
SOLUTION
import random
answer = random.randint(1, 100)
attempts = 0
while True:
guess = int(input("숫자: "))
attempts += 1
if guess < answer:
print("↑")
elif guess > answer:
print("↓")
else:
print(f"🎉 정답! ({attempts}번째 시도)")
break
▶ 실행 결과
숫자: 50
↑
숫자: 75
↓
숫자: 65
🎉 정답! (3번째 시도)