Ch3. Python 기초 — 조건문과 반복문
프로그램의 흐름 제어
프로그램은 기본적으로 위에서 아래로 순서대로 실행됩니다. 흐름 제어(Control Flow) 구조를 사용하면 조건에 따라 다른 코드를 실행하거나, 같은 코드를 반복 실행할 수 있습니다.
- 조건문: 조건에 따라 실행 경로를 선택
- 반복문: 조건이 충족되는 동안 코드를 반복 실행
비교 연산자와 논리 연산자
조건문을 사용하기 전에, 조건을 표현하는 연산자를 이해해야 합니다.
비교 연산자
| 연산자 | 의미 | 예시 | 결과 |
|---|---|---|---|
== | 같다 | 5 == 5 | True |
!= | 다르다 | 5 != 3 | True |
> | 크다 | 5 > 3 | True |
< | 작다 | 5 < 3 | False |
>= | 크거나 같다 | 5 >= 5 | True |
<= | 작거나 같다 | 3 <= 5 | True |
논리 연산자
| 연산자 | 의미 | 예시 | 결과 |
|---|---|---|---|
and | 둘 다 True | True and False | False |
or | 하나라도 True | True or False | True |
not | 반전 | not True | False |
age = 20
has_id = True
# and: 둘 다 만족해야 True
print(age >= 19 and has_id) # True
# or: 하나만 만족해도 True
print(age < 10 or has_id) # True
# not: 반전
print(not has_id) # False
if 문 — 기본 조건문
if 조건:
# 조건이 True일 때 실행
코드블록
들여쓰기(indentation) 가 매우 중요합니다. 파이썬은 들여쓰기로 코드 블록을 구분합니다. 보통 스페이스 4칸 또는 탭 1칸을 사용합니다.
score = 85
if score >= 60:
print("합격입니다!")
print("수고하셨습니다.")
print("이 줄은 항상 실행됩니다.")
출력:
합격입니다!
수고하셨습니다.
이 줄은 항상 실행됩니다.
if-else 문
if 조건:
# 조건이 True일 때
코드블록A
else:
# 조건이 False일 때
코드블록B
score = 45
if score >= 60:
print("합격!")
else:
print("불합격...")
print(f"부족한 점수: {60 - score}점")
if-elif-else 문
여러 조건을 순서대로 검사합니다.
score = int(input("점수를 입력하세요: "))
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(f"학점: {grade}")
중요: elif 조건은 위에서부터 순서대로 검사하며, 처음으로 True가 되는 블록만 실행됩니다.
중첩 조건문
age = 17
has_permission = True
if age >= 18:
if has_permission:
print("입장 가능합니다.")
else:
print("보호자 동의가 필요합니다.")
else:
print("미성년자는 입장할 수 없습니다.")
중첩 조건문은 and로 간단하게 쓸 수도 있습니다:
if age >= 18 and has_permission:
print("입장 가능합니다.")
조건부 표현식 (Ternary Operator)
한 줄로 if-else를 표현하는 간결한 방법입니다.
# 형식: 참일_때_값 if 조건 else 거짓일_때_값
score = 75
result = "합격" if score >= 60 else "불합격"
print(result) # 합격
for 문 — 반복문
for 문은 시퀀스(리스트, 문자열, range 등)의 각 요소를 순서대로 순회합니다.
for 변수 in 시퀀스:
반복할_코드
# 리스트 순회
fruits = ["사과", "바나나", "딸기"]
for fruit in fruits:
print(fruit)
# 출력:
# 사과
# 바나나
# 딸기
# 문자열 순회
for char in "Python":
print(char, end=" ")
# 출력: P y t h o n
range() 함수
range()는 정수 시퀀스를 생성합니다. for 문과 자주 함께 사용합니다.
range(stop) # 0부터 stop-1까지
range(start, stop) # start부터 stop-1까지
range(start, stop, step) # start부터 stop-1까지 step 간격
# 1부터 5까지
for i in range(1, 6):
print(i, end=" ") # 1 2 3 4 5
print()
# 0부터 9까지
for i in range(10):
print(i, end=" ") # 0 1 2 3 4 5 6 7 8 9
print()
# 2씩 건너뛰기
for i in range(0, 11, 2):
print(i, end=" ") # 0 2 4 6 8 10
print()
# 거꾸로
for i in range(5, 0, -1):
print(i, end=" ") # 5 4 3 2 1
while 문 — 조건 반복문
조건이 True인 동안 코드 블록을 반복합니다.
while 조건:
반복할_코드
count = 1
while count <= 5:
print(f"{count}번째 반복")
count += 1
print("반복 종료!")
무한 루프 주의: while True:를 사용하면 무한히 반복됩니다. 반드시 break로 탈출 조건을 만들어야 합니다.
# while을 이용한 사용자 입력 검증
while True:
age = int(input("나이를 입력하세요 (1-120): "))
if 1 <= age <= 120:
print(f"입력된 나이: {age}")
break
else:
print("올바른 나이를 입력하세요!")
break 문 — 반복 즉시 탈출
break는 반복문을 즉시 종료하고 반복문 다음 코드로 이동합니다.
# 숫자 중 첫 번째 짝수 찾기
numbers = [1, 3, 7, 4, 9, 2]
for num in numbers:
if num % 2 == 0:
print(f"첫 번째 짝수: {num}")
break
# 출력: 첫 번째 짝수: 4
# 검색 기능
students = ["김철수", "이영희", "박민준", "최수연"]
target = input("찾을 학생 이름: ")
for student in students:
if student == target:
print(f"{target}을(를) 찾았습니다!")
break
else:
# for 문이 break 없이 정상 종료되면 실행
print(f"{target}은(는) 목록에 없습니다.")
continue 문 — 현재 반복 건너뜀
continue는 현재 반복의 나머지 코드를 건너뛰고 다음 반복으로 이동합니다.
# 홀수만 출력
for i in range(1, 11):
if i % 2 == 0:
continue # 짝수면 아래 코드 건너뜀
print(i, end=" ")
# 출력: 1 3 5 7 9
# 특정 값 제외하고 처리
scores = [85, -1, 92, -1, 78, 65]
total = 0
count = 0
for score in scores:
if score < 0:
continue # 음수 값은 건너뜀
total += score
count += 1
print(f"유효 점수 합계: {total}, 평균: {total/count:.1f}")
중첩 반복문
반복문 안에 반복문을 넣을 수 있습니다.
# 구구단 출력
for i in range(2, 10):
for j in range(1, 10):
print(f"{i} x {j} = {i*j:2d}", end=" ")
print() # 줄 바꿈
# 별표 삼각형
for i in range(1, 6):
print("*" * i)
# 출력:
# *
# **
# ***
# ****
# *****
enumerate() — 인덱스와 값 동시에
fruits = ["사과", "바나나", "딸기"]
for i, fruit in enumerate(fruits):
print(f"{i+1}번: {fruit}")
# 출력:
# 1번: 사과
# 2번: 바나나
# 3번: 딸기
enumerate(시퀀스, start=1)으로 시작 인덱스 지정 가능:
for i, fruit in enumerate(fruits, start=1):
print(f"{i}번: {fruit}")
zip() — 두 시퀀스 병렬 순회
names = ["Alice", "Bob", "Charlie"]
scores = [90, 85, 92]
for name, score in zip(names, scores):
print(f"{name}: {score}점")
# 출력:
# Alice: 90점
# Bob: 85점
# Charlie: 92점
실전 예제 — 소수 판별 프로그램
# prime_check.py
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
# 2부터 50까지 소수 출력
print("2~50 사이의 소수:")
primes = []
for num in range(2, 51):
if is_prime(num):
primes.append(num)
print(primes)
print(f"총 {len(primes)}개")
출력:
2~50 사이의 소수:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
총 15개
실전 예제 — 숫자 맞추기 게임
# number_game.py
import random
secret = random.randint(1, 100)
attempts = 0
print("1부터 100 사이의 숫자를 맞춰보세요!")
while True:
guess = int(input("숫자 입력: "))
attempts += 1
if guess < secret:
print("더 큰 숫자입니다.")
elif guess > secret:
print("더 작은 숫자입니다.")
else:
print(f"정답! {attempts}번 만에 맞췄습니다!")
break
학습 정리
| 구조 | 형식 | 용도 |
|---|---|---|
if/elif/else | 조건 분기 | 조건에 따른 코드 선택 |
for ... in | 시퀀스 순회 | 리스트, 문자열, range 반복 |
while 조건: | 조건 반복 | 조건이 True인 동안 반복 |
break | 즉시 탈출 | 반복문 조기 종료 |
continue | 건너뜀 | 현재 반복 나머지 코드 스킵 |
range(start, stop, step) | 정수 시퀀스 생성 | for문과 결합 |
enumerate() | 인덱스+값 | 위치와 값을 동시에 |
실전 퀴즈 5문항
Q1. range(1, 10, 3)을 for 문으로 순회하면 어떤 숫자가 출력되나요?
A1. 1, 4, 7 이 출력됩니다. 1부터 시작해서 3씩 증가하며 10 미만까지 반복하므로 1, 4, 7이 됩니다.
Q2. 다음 코드의 출력 결과를 예측하세요.
for i in range(5):
if i == 3:
break
print(i, end=" ")
A2. 0 1 2 가 출력됩니다. i가 0, 1, 2일 때는 정상 출력되고, i가 3이 되면 break가 실행되어 반복문이 즉시 종료됩니다.
Q3. continue와 break의 차이를 설명하고, 각각의 사용 예를 들어보세요.
A3.
break: 반복문 자체를 완전히 종료합니다. 특정 조건을 만족하면 더 이상 반복이 필요 없을 때 사용합니다. 예: 리스트에서 원하는 값을 찾으면 더 이상 탐색할 필요 없으므로 break.continue: 현재 반복의 나머지 코드만 건너뛰고 다음 반복을 계속합니다. 특정 요소를 제외하고 처리할 때 사용합니다. 예: 음수 값은 건너뛰고 양수만 합산할 때 continue.
Q4. 다음 코드를 while 문으로 다시 작성하세요.
for i in range(1, 6):
print(i)
A4.
i = 1
while i <= 5:
print(i)
i += 1
Q5. 아래 코드는 1~100 사이의 3의 배수이면서 5의 배수인 수(즉, 15의 배수)를 출력하려 합니다. 빈칸을 채우세요.
for n in range(1, 101):
if n % 3 == 0 ___ n % 5 == 0:
print(n, end=" ")
A5. 빈칸에는 and를 넣어야 합니다. 두 조건을 모두 만족해야 하므로 논리 AND가 필요합니다. 출력 결과: 15 30 45 60 75 90
OIYO 편집부
Content Editor지식 인큐베이터이자 전문 콘텐츠 크리에이터. 경영, 경제, 법률 및 실생활에 유용한 실무/자격증 중심의 깊이 있는 정보를 연구하고 공유합니다.