컴퓨터과학 챕터 3 약 8분

Ch3. Python 기초 — 조건문과 반복문

O
OIYO 편집부 기여자
3/8

프로그램의 흐름 제어

프로그램은 기본적으로 위에서 아래로 순서대로 실행됩니다. 흐름 제어(Control Flow) 구조를 사용하면 조건에 따라 다른 코드를 실행하거나, 같은 코드를 반복 실행할 수 있습니다.

  • 조건문: 조건에 따라 실행 경로를 선택
  • 반복문: 조건이 충족되는 동안 코드를 반복 실행

비교 연산자와 논리 연산자

조건문을 사용하기 전에, 조건을 표현하는 연산자를 이해해야 합니다.

비교 연산자

연산자의미예시결과
==같다5 == 5True
!=다르다5 != 3True
>크다5 > 3True
<작다5 < 3False
>=크거나 같다5 >= 5True
<=작거나 같다3 <= 5True

논리 연산자

연산자의미예시결과
and둘 다 TrueTrue and FalseFalse
or하나라도 TrueTrue or FalseTrue
not반전not TrueFalse
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. continuebreak의 차이를 설명하고, 각각의 사용 예를 들어보세요.

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

O

OIYO 편집부

Content Editor

지식 인큐베이터이자 전문 콘텐츠 크리에이터. 경영, 경제, 법률 및 실생활에 유용한 실무/자격증 중심의 깊이 있는 정보를 연구하고 공유합니다.