제어문

파이썬에서 제어문(Control Statements)은 프로그램의 흐름을 제어하는 명령어로, 조건문(Conditional Statements)반복문(Loop Statements)이 있다. 이를 통해 프로그램이 특정 조건을 만족할 때 실행되거나, 특정 동작을 반복하도록 만들 수 있다.

제어문 유형
제어문 유형 설명 및 사용 예시
조건문 if, elif, else를 사용하여 조건에 따라 코드 실행
반복문 for, while을 사용하여 반복 작업 수행
break 특정 조건에서 반복문 강제 종료
continue 특정 조건에서 현재 반복을 건너뛰고 다음 반복 실행
pass 실행할 코드가 없을 때 사용
else 반복문이 정상 종료되면 실행 (break 시 실행 안 됨)

제어문을 적절히 활용하면 프로그램의 흐름을 효과적으로 제어할 수 있다.

조건문

조건문은 주어진 조건에 따라 특정 코드블록을 실행할 수 있도록 제어한다.

if문

if문은 주어진 조건이 참(True)일 때 특정 코드 블록을 실행하는 조건문이다. 프로그램의 흐름을 제어할 때 필수적으로 사용되며, if, elif, else 키워드를 활용하여 다양한 조건을 설정할 수 있다.

기능 코드 예시
기본 if if x > 5: print("x는 5보다 크다")
if-else if x > 5: ... else: ...
if-elif-else if x > 10: ... elif x > 5: ... else: ...
중첩 if if x > 10: if x > 20: ...
논리 연산자 if x > 5 and x < 10: ...
비교 연산자 연속 사용 if 5 < x < 10: ...
in, not in if "apple" in fruits: ...
삼항 연산자 result = "참" if x > 5 else "거짓"
is== 비교 if a is b: ...

if문을 활용하면 프로그램이 입력값에 따라 다양한 동작을 수행할 수 있다. 논리 연산자, 비교 연산자, in 등의 기능과 조합하면 더욱 유용하게 사용할 수 있다.

기본 if 문

flowchart TD
    A[Start] --> B{x > 5?}
    B -- 참(True) --> C["x는 5보다 크다" 출력] --> D[End]
    B -- 거짓(False) --> D[End]

기본 if문

if문은 조건식이 True일 때 실행된다.

x = 10

if x > 5:
    print("x는 5보다 크다")  # 조건이 참이므로 실행됨
x는 5보다 크다
  • if 다음에 조건식을 작성하며, 조건이 True일 경우 : 뒤의 코드 블록이 실행
  • if문에 속하는 코드 블록은 반드시 들여쓰기해야 함

if-else 문

flowchart TD
    A[Start] --> B{x > 5?}
    B -- 참(True) --> C["x는 5보다 크다" 출력] --> D[End]
    B -- 거짓(False) --> E["x는 5 이하이다" 출력] --> D[End]

if-else문

if문 뒤에 else를 추가하면 조건이 거짓(False)일 때 실행할 코드를 지정할 수 있다.

x = 3

if x > 5:
    print("x는 5보다 크다")
else:
    print("x는 5 이하이다")  # 조건이 False이므로 실행됨
x는 5 이하이다
  • if의 조건이 False이면 else 블록의 코드가 실행

if-elif-else 문

flowchart TD
    A[Start] --> B{x > 10?}
    B -- 참(True) --> C["x는 10보다 크다" 출력] --> F[End]
    B -- 거짓(False) --> D{x > 5?}
    D -- 참(True) --> E["x는 5보다 크다" 출력] --> F[End]
    D -- 거짓(False) --> G["x는 5 이하이다" 출력] --> F[End]

if-elif-else문

여러 개의 조건을 검사할 때 elif(else if)를 사용하여 다중 조건문을 만들 수 있다.

x = 7

if x > 10:
    print("x는 10보다 크다")
elif x > 5:
    print("x는 5보다 크다")  # 이 조건이 True이므로 실행됨
else:
    print("x는 5 이하이다")
x는 5보다 크다
  • if 조건이 False이면 elif의 조건을 검사
  • 첫 번째로 Trueelif 블록이 실행되며, 이후의 elif는 검사하지 않음
  • 모든 조건이 False이면 else 블록이 실행

중첩 if문

flowchart TD
    A[Start] --> B{x > 10?}
    B -- 참(True) --> C["x는 10보다 크다" 출력] --> D{x > 20?}
    D -- 참(True) --> E["x는 20보다 크다" 출력] --> F[End]
    D -- 거짓(False) --> G["x는 10보다 크지만 20 이하는 아니다" 출력] --> F[End]
    B -- 거짓(False) --> H[End]

중첩 if문

if문 내부에 또 다른 if문을 포함하여 조건을 중첩할 수 있다.

x = 15

if x > 10:
    print("x는 10보다 크다")
    if x > 20:
        print("x는 20보다 크다")
    else:
        print("x는 10보다 크지만 20 이하는 아니다")
x는 10보다 크다
x는 10보다 크지만 20 이하는 아니다
  • if문 안에 또 다른 if문을 넣을 수 있으며, 들여쓰기 수준에 따라 실행이 결정

조건 표현식 (삼항 연산자)

if-else한 줄로 표현할 수도 있다.

x = 10
result = "x는 5보다 크다" if x > 5 else "x는 5 이하이다"

print(result)  # 출력: x는 5보다 크다
x는 5보다 크다
  • 조건식 if 참일 때 값 else 거짓일 때 값 형태로 작성

여러 조건을 한 번에 검사하기

논리 연산자 사용

조건문에서 and, or, not을 사용하여 여러 개의 조건을 조합할 수 있다.

x = 8

# and 연산자: 두 조건이 모두 참이어야 실행
if x > 5 and x < 10:
    print("x는 5보다 크고 10보다 작다")
x는 5보다 크고 10보다 작다
# or 연산자: 둘 중 하나만 참이면 실행
if x < 5 or x > 7:
    print("x는 5보다 작거나 7보다 크다")
x는 5보다 작거나 7보다 크다
# not 연산자: 조건을 반대로 변경
if not x == 5:
    print("x는 5가 아니다")
x는 5가 아니다
비교 연산자 연속 사용

파이썬에서는 비교 연산자를 연속해서 사용할 수 있다.

x = 7

if 5 < x < 10:  # 5 < x and x < 10 과 동일
    print("x는 5보다 크고 10보다 작다")
x는 5보다 크고 10보다 작다

if문과 in, not in 사용

리스트, 튜플, 문자열, 딕셔너리 등에서 특정 요소가 존재하는지 확인할 때 innot in을 사용할 수 있다.

fruits = ["apple", "banana", "cherry"]

if "banana" in fruits:
    print("바나나가 리스트에 포함되어 있다.")
바나나가 리스트에 포함되어 있다.
if "grape" not in fruits:
    print("포도는 리스트에 포함되어 있지 않다.")
포도는 리스트에 포함되어 있지 않다.

is와 ==의 차이

== 연산자는 값이 같은지 비교하고, is 연산자는 객체(메모리 주소)가 같은지 비교한다.

a = [1, 2, 3]
b = [1, 2, 3]
c = a

print(a == b)  # True (값이 같음)
print(a is b)  # False (다른 객체)
print(a is c)  # True (같은 객체)
True
False
True

실전 예제

사용자 입력값 조건 처리

age = int(input("나이를 입력하세요: "))

if age >= 18:
    print("성인입니다.")
elif age >= 13:
    print("청소년입니다.")
else:
    print("어린이입니다.")

숫자 판별 (양수, 음수, 0)

num = int(input("숫자를 입력하세요: "))

if num > 0:
    print("양수입니다.")
elif num < 0:
    print("음수입니다.")
else:
    print("0입니다.")

반복문

반복문(iteration)은 제어문중 하나로, 프로그램 소스 코드내에서 특정한 부분의 코드가 반복적으로 수행될 수 있도록 하는 구문이다. 대표적인 구문으로 for문과 while문이 있다.

for문

for 문은 반복 가능한(iterable) 객체(리스트, 튜플, 문자열, 딕셔너리, range 등)의 요소를 순차적으로 순회하면서 실행되는 반복문이다.

for문 사용 방식
사용 방식 예제
리스트 순회 for x in [1, 2, 3]: print(x)
range() 사용 for i in range(5): print(i)
문자열 순회 for char in "hello": print(char)
딕셔너리 순회 for key, value in dict.items(): print(key, value)
enumerate() 사용 for i, v in enumerate(lst): print(i, v)
zip() 사용 for x, y in zip(lst1, lst2): print(x, y)
중첩 반복문 for i in range(3): for j in range(2): print(i, j)

for 문을 활용하면 데이터를 효율적으로 반복 처리할 수 있다.

기본 for 문

flowchart TD
    A[Start] --> B[Initialize loop variables]
    B --> C{Condition check}
    C -->|True| D[Execute loop body]
    D --> E[Update loop variable]
    E --> C
    C -->|False| F[End]

for문

리스트의 각 요소를 하나씩 가져와서 변수에 할당한 후, 코드 블록을 실행한다.

fruits = ["apple", "banana", "cherry"]

for fruit in fruits:
    print(fruit)
apple
banana
cherry
  • for 변수 in iterable: 형식으로 작성된다.
  • iterable의 각 요소가 변수에 차례대로 할당되면서 반복 실행된다.

range() 함수와 함께 사용

range() 함수는 일정 범위의 숫자를 생성하며, for 문과 함께 자주 사용된다.

for i in range(5):  # 0부터 4까지 반복
    print(i)
0
1
2
3
4
range(start, end, step) 사용
  • range(시작, 끝, 증가값) 형식으로 사용하면 특정 범위에서 일정 간격으로 값을 생성할 수 있다.
for i in range(1, 10, 2):  # 1부터 9까지 2씩 증가
    print(i)
1
3
5
7
9
문자열 순회

문자열도 for 문을 사용하여 한 글자씩 순회할 수 있다.

word = "Python"

for char in word:
    print(char)
P
y
t
h
o
n

튜플 순회

튜플도 for 문을 사용하여 요소를 순회할 수 있다.

numbers = (10, 20, 30)

for num in numbers:
    print(num)
10
20
30

딕셔너리 순회

딕셔너리는 기본적으로 키를 순회하며, keys(), values(), items() 메서드를 활용하여 다양한 방식으로 순회할 수 있다.

키(key) 순회
person = {"name": "Alice", "age": 25, "city": "Seoul"}

for key in person:
    print(key)  # 키만 출력
name
age
city
값(value) 순회
for value in person.values():
    print(value)  # 값만 출력
Alice
25
Seoul
키-값(key-value) 쌍 순회
for key, value in person.items():
    print(f"{key}: {value}")
name: Alice
age: 25
city: Seoul

enumerate()를 사용하여 인덱스와 함께 순회

enumerate() 함수는 반복 가능한 객체를 순회하면서 인덱스와 요소를 함께 제공한다.

fruits = ["apple", "banana", "cherry"]

for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")
0: apple
1: banana
2: cherry

zip()을 사용하여 여러 리스트 동시에 순회

zip() 함수는 여러 리스트를 묶어서 동시에 순회할 때 사용한다.

names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]

for name, age in zip(names, ages):
    print(f"{name}의 나이는 {age}살입니다.")
Alice의 나이는 25살입니다.
Bob의 나이는 30살입니다.
Charlie의 나이는 35살입니다.

중첩 for 문

for 문 안에 또 다른 for 문을 넣어서 이중 반복문을 만들 수 있다.

이중 반복문
for i in range(3):  # 0, 1, 2
    for j in range(2):  # 0, 1
        print(f"i={i}, j={j}")
i=0, j=0
i=0, j=1
i=1, j=0
i=1, j=1
i=2, j=0
i=2, j=1

반복문 제어문

break 문

break 문은 반복문을 즉시 종료한다.

for i in range(5):
    if i == 3:
        break  # 3이 되면 반복 종료
    print(i)
0
1
2
continue 문

continue 문은 현재 반복을 건너뛰고 다음 반복을 수행한다.

for i in range(5):
    if i == 2:
        continue  # 2일 때 건너뛰기
    print(i)
0
1
3
4
pass 문

pass 문은 실행할 코드가 없을 때 사용하며, 문법적으로 오류가 발생하지 않도록 한다.

for i in range(5):
    if i == 2:
        pass  # 아무 동작도 하지 않음
    else:
        print(i)
0
1
3
4

반복문과 else

반복문에 else를 추가하면, 반복문이 정상적으로 끝났을 때 실행된다. (break로 종료되면 실행되지 않음)

for i in range(5):
    print(i)
else:
    print("반복이 끝났습니다.")  # 정상 종료되면 실행
0
1
2
3
4
반복이 끝났습니다.
for i in range(5):
    if i == 3:
        break  # 반복 중단
    print(i)
else:
    print("반복이 끝났습니다.")  # 실행되지 않음
0
1
2

리스트 내포

for 문을 사용하여 리스트를 간결하게 생성(List Comprehension)할 수 있다.

# 기존 방식
squares = []
for i in range(1, 6):
    squares.append(i * i)

print(squares)
[1, 4, 9, 16, 25]
# 리스트 내포 방식
squares = [i * i for i in range(1, 6)]
print(squares)  
[1, 4, 9, 16, 25]

while문

flowchart TD
    A[Start] --> B[Initialize variables]
    B --> C{While condition check}
    
    C -->|True| D[Execute loop body]
    D --> E[Update variables]
    E --> C
    
    C -->|False| F[End]

while문

while 문은 조건이 참(True)인 동안 반복 실행하는 루프이다. 반복 횟수가 정해지지 않았거나, 특정 조건이 만족될 때까지 실행해야 하는 경우에 유용하다.

개념 설명 예제
기본 구조 조건이 참인 동안 실행 while 조건:
무한 루프 계속 반복 while True:
break 반복문 강제 종료 if 조건: break
continue 현재 반복 건너뛰기 if 조건: continue
else while 정상 종료 시 실행 while 조건: ... else: ...

while 문은 특정 조건이 만족될 때까지 실행되므로, 종료 조건을 명확히 설정하는 것이 중요하다.

기본 구조

while 조건:
    실행할 코드
  • 조건참(True)이면 블록 내부의 코드가 실행된다.
  • 실행이 끝나면 다시 조건을 검사하며, 조건이 거짓(False)이 될 때까지 반복한다.

count = 0

while count < 5:  # count가 5보다 작을 때까지 반복
    print("반복 중:", count)
    count += 1  # count 값을 증가시켜 반복 조건을 변경
반복 중: 0
반복 중: 1
반복 중: 2
반복 중: 3
반복 중: 4
  • count가 5가 되면 count < 5 조건이 거짓(False)이므로 반복문이 종료된다.

무한 루프

while True를 사용하면 무한 루프가 생성된다. 특정 조건을 만족하면 break 문을 사용하여 종료해야 한다.

while True:
    answer = input("종료하려면 'exit' 입력: ")
    if answer == "exit":
        print("반복문 종료")
        break  # 루프 종료
  • 사용자가 "exit"을 입력하면 break가 실행되어 루프가 종료

break 문을 이용한 반복문 종료

break 문은 조건을 만족하면 반복문을 즉시 종료한다.

num = 1

while num <= 10:
    print(num)
    if num == 5:  # num이 5가 되면 루프 종료
        break
    num += 1
1
2
3
4
5

continue 문을 이용한 반복 건너뛰기

continue 문은 특정 조건을 만나면 현재 반복을 건너뛰고 다음 반복으로 이동한다.

num = 0

while num < 5:
    num += 1
    if num == 3:  # num이 3이면 건너뛰기
        continue
    print(num)
1
2
4
5
  • num == 3일 때 continue가 실행되므로 print(num)이 실행되지 않음

else 블록 사용

while 문이 정상적으로 종료되었을 때(즉, break 없이 종료) 실행된다.

while-else 문
num = 1

while num < 5:
    print(num)
    num += 1
else:
    print("반복이 정상적으로 종료됨")
1
2
3
4
반복이 정상적으로 종료됨
  • num이 5가 되어 while 조건이 False가 되면 else 블록이 실행
  • 만약 breakwhile을 중단하면 else 블록은 실행되지 않음
num = 1

while num < 5:
    print(num)
    if num == 3:
        break  # 루프 강제 종료
    num += 1
else:
    print("반복이 정상적으로 종료됨")  # 실행되지 않음
1
2
3
  • num == 3일 때 break가 실행되었으므로 else 블록은 실행되지 않음

while 문 활용 예제

사용자 입력을 받을 때까지 반복

password = "python123"

while True:
    user_input = input("비밀번호를 입력하세요: ")
    if user_input == password:
        print("비밀번호가 올바릅니다!")
        break
    print("비밀번호가 틀렸습니다. 다시 입력하세요.")
  • 올바른 비밀번호를 입력할 때까지 반복한다.
숫자 맞히기 게임

import random

target = random.randint(1, 10)  # 1부터 10 사이의 난수 생성

while True:
    guess = int(input("숫자를 맞혀보세요 (1~10): "))
    if guess == target:
        print("정답입니다!")
        break
    elif guess < target:
        print("더 큰 숫자를 입력하세요.")
    else:
        print("더 작은 숫자를 입력하세요.")
  • 사용자가 정답을 맞힐 때까지 반복

기타 제어문

파이썬에는 if, for, while 같은 기본적인 제어문 외에도 반복문을 제어하거나 흐름을 변경하는 다양한 제어문이 있다. 대표적인 제어문은 다음과 같다.

기타 제어문
제어문 설명 예제
break 반복문 강제 종료 if 조건: break
continue 현재 반복 건너뛰기 if 조건: continue
else (반복문) 정상 종료 시 실행 for ... else:
pass 실행할 코드가 없을 때 사용 if 조건: pass
assert 조건 검증 및 예외 발생 assert x > 0, "오류 메시지"
with 리소스 자동 관리 with open("파일") as f:

이러한 제어문을 활용하면 코드를 더 효율적으로 관리하고, 오류를 방지할 수 있다.

break 문: 반복문 강제 종료

break 문은 현재 실행 중인 반복문(for, while)을 즉시 종료한다.

for i in range(1, 6):
    if i == 3:
        break  # i가 3일 때 반복문 종료
    print(i)
1
2
  • i == 3일 때 break가 실행되어 반복문이 종료

while 문에서 break 사용

count = 0

while count < 10:
    print(count)
    if count == 5:
        break  # count가 5일 때 루프 종료
    count += 1
0
1
2
3
4
5

continue 문: 현재 반복 건너뛰기

continue 문은 현재 반복을 건너뛰고 다음 반복으로 이동한다.

for i in range(1, 6):
    if i == 3:
        continue  # i가 3일 때 아래 코드를 실행하지 않고 다음 반복으로 이동
    print(i)
1
2
4
5
  • i == 3일 때 print(i)가 실행되지 않고 다음 반복으로 넘어감감

while 문에서 continue 사용

count = 0

while count < 5:
    count += 1
    if count == 3:
        continue  # count가 3일 때 print() 실행을 건너뜀
    print(count)
1
2
4
5
  • count == 3일 때 print(count)가 실행되지 않음

else 문과 반복문

for 또는 while 반복문에서 정상적으로 종료되었을 때(break 없이 종료될 때) else 블록이 실행된다.

for 문에서 else 사용

for i in range(1, 6):
    print(i)
else:
    print("반복문이 정상적으로 종료됨")
1
2
3
4
5
반복문이 정상적으로 종료됨
  • break가 발생하지 않았기 때문에 else 블록이 실행
for i in range(1, 6):
    print(i)
    if i == 3:
        break  # 반복문 강제 종료
else:
    print("반복문이 정상적으로 종료됨")  # 실행되지 않음
1
2
3
  • break로 종료되었기 때문에 else 블록이 실행되지 않음

while 문에서 else 사용

count = 0

while count < 5:
    print(count)
    count += 1
else:
    print("반복문이 정상적으로 종료됨")
0
1
2
3
4
반복문이 정상적으로 종료됨
  • while 조건이 False가 되어 정상 종료되었으므로 else가 실행

pass 문: 코드 실행을 미룸

pass 문은 아무 동작도 하지 않는 문장으로, 문법적으로 코드가 필요하지만 실행할 내용이 없을 때 사용한다.

for i in range(5):
    if i == 2:
        pass  # 실행할 코드가 없지만 문법적으로 필요할 때 사용
    print(i)
0
1
2
3
4
  • pass 문이 있어도 프로그램 흐름에는 영향을 주지 않음
for i in range(5):
    if i == 2:
        continue  # 실행할 코드가 없지만 문법적으로 필요할 때 사용
    print(i)
0
1
3
4
  • continue문을 사용하게 되면 i == 2인 경우 실행하지 않고 다음 반복을 진행하게 됨

예제: 함수 또는 클래스의 구조만 미리 작성

def my_function():
    pass  # 함수 구현은 나중에 작성

class MyClass:
    pass  # 클래스 구현은 나중에 작성
  • pass를 사용하면 추후 구현할 내용을 미리 작성해둘 수 있음

assert 문: 조건 검증

assert 문은 조건이 참(True)인지 확인하고, 거짓(False)이면 AssertionError 예외를 발생시킨다. 주로 디버깅이나 테스트용으로 사용된다.

x = 10
assert x > 0  # 정상 실행됨

y = -5
assert y > 0, "y는 0보다 커야 합니다."  # AssertionError 발생
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Cell In[46], line 5
      2 assert x > 0  # 정상 실행됨
      4 y = -5
----> 5 assert y > 0, "y는 0보다 커야 합니다."  # AssertionError 발생

AssertionError: y는 0보다 커야 합니다.
  • assert개발 중 오류를 조기에 감지하는 용도로 활용

with 문: 리소스 자동 관리

with 문은 파일, 네트워크 연결 등 리소스를 자동으로 관리한다. with 문을 사용하면 파일을 자동으로 닫을 수 있어 close()를 직접 호출할 필요가 없다.

with open("example.txt", "w") as file:
    file.write("Hello, World!")
  • with 문이 끝나면 파일이 자동으로 닫힘0
file = open("example.txt", "w")
try:
    file.write("Hello, World!")
finally:
    file.close()  # 직접 파일을 닫아야 함
  • with 문을 사용하면 try-finally 없이 리소스를 안전하게 정리 가능

참고자료