flowchart TD A[Start] --> B{x > 5?} B -- 참(True) --> C["x는 5보다 크다" 출력] --> D[End] B -- 거짓(False) --> D[End]
제어문
파이썬에서 제어문(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 문
if
문은 조건식이 True
일 때 실행된다.
= 10
x
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
를 추가하면 조건이 거짓(False
)일 때 실행할 코드를 지정할 수 있다.
= 3
x
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]
여러 개의 조건을 검사할 때 elif
(else if)를 사용하여 다중 조건문을 만들 수 있다.
= 7
x
if x > 10:
print("x는 10보다 크다")
elif x > 5:
print("x는 5보다 크다") # 이 조건이 True이므로 실행됨
else:
print("x는 5 이하이다")
x는 5보다 크다
if
조건이False
이면elif
의 조건을 검사- 첫 번째로
True
인elif
블록이 실행되며, 이후의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
문을 포함하여 조건을 중첩할 수 있다.
= 15
x
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
를 한 줄로 표현할 수도 있다.
= 10
x = "x는 5보다 크다" if x > 5 else "x는 5 이하이다"
result
print(result) # 출력: x는 5보다 크다
x는 5보다 크다
조건식 if 참일 때 값 else 거짓일 때 값
형태로 작성
여러 조건을 한 번에 검사하기
논리 연산자 사용
조건문에서 and
, or
, not
을 사용하여 여러 개의 조건을 조합할 수 있다.
= 8
x
# 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가 아니다
비교 연산자 연속 사용
파이썬에서는 비교 연산자를 연속해서 사용할 수 있다.
= 7
x
if 5 < x < 10: # 5 < x and x < 10 과 동일
print("x는 5보다 크고 10보다 작다")
x는 5보다 크고 10보다 작다
if문과 in, not in 사용
리스트, 튜플, 문자열, 딕셔너리 등에서 특정 요소가 존재하는지 확인할 때 in
과 not in
을 사용할 수 있다.
= ["apple", "banana", "cherry"]
fruits
if "banana" in fruits:
print("바나나가 리스트에 포함되어 있다.")
바나나가 리스트에 포함되어 있다.
if "grape" not in fruits:
print("포도는 리스트에 포함되어 있지 않다.")
포도는 리스트에 포함되어 있지 않다.
is와 ==의 차이
==
연산자는 값이 같은지 비교하고, is
연산자는 객체(메모리 주소)가 같은지 비교한다.
= [1, 2, 3]
a = [1, 2, 3]
b = a
c
print(a == b) # True (값이 같음)
print(a is b) # False (다른 객체)
print(a is c) # True (같은 객체)
True
False
True
실전 예제
사용자 입력값 조건 처리
= int(input("나이를 입력하세요: "))
age
if age >= 18:
print("성인입니다.")
elif age >= 13:
print("청소년입니다.")
else:
print("어린이입니다.")
숫자 판별 (양수, 음수, 0)
= int(input("숫자를 입력하세요: "))
num
if num > 0:
print("양수입니다.")
elif num < 0:
print("음수입니다.")
else:
print("0입니다.")
반복문
반복문(iteration)은 제어문중 하나로, 프로그램 소스 코드내에서 특정한 부분의 코드가 반복적으로 수행될 수 있도록 하는 구문이다. 대표적인 구문으로 for문과 while문이 있다.
for문
for
문은 반복 가능한(iterable) 객체(리스트, 튜플, 문자열, 딕셔너리, range 등)의 요소를 순차적으로 순회하면서 실행되는 반복문이다.
사용 방식 | 예제 |
---|---|
리스트 순회 | 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]
리스트의 각 요소를 하나씩 가져와서 변수에 할당한 후, 코드 블록을 실행한다.
= ["apple", "banana", "cherry"]
fruits
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
문을 사용하여 한 글자씩 순회할 수 있다.
= "Python"
word
for char in word:
print(char)
P
y
t
h
o
n
튜플 순회
튜플도 for
문을 사용하여 요소를 순회할 수 있다.
= (10, 20, 30)
numbers
for num in numbers:
print(num)
10
20
30
딕셔너리 순회
딕셔너리는 기본적으로 키를 순회하며, keys()
, values()
, items()
메서드를 활용하여 다양한 방식으로 순회할 수 있다.
키(key) 순회
= {"name": "Alice", "age": 25, "city": "Seoul"}
person
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()
함수는 반복 가능한 객체를 순회하면서 인덱스와 요소를 함께 제공한다.
= ["apple", "banana", "cherry"]
fruits
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
0: apple
1: banana
2: cherry
zip()을 사용하여 여러 리스트 동시에 순회
zip()
함수는 여러 리스트를 묶어서 동시에 순회할 때 사용한다.
= ["Alice", "Bob", "Charlie"]
names = [25, 30, 35]
ages
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):
* i)
squares.append(i
print(squares)
[1, 4, 9, 16, 25]
# 리스트 내포 방식
= [i * i for i in range(1, 6)]
squares 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
문은 조건이 참(True
)인 동안 반복 실행하는 루프이다. 반복 횟수가 정해지지 않았거나, 특정 조건이 만족될 때까지 실행해야 하는 경우에 유용하다.
개념 | 설명 | 예제 |
---|---|---|
기본 구조 | 조건이 참인 동안 실행 | while 조건: |
무한 루프 | 계속 반복 | while True: |
break |
반복문 강제 종료 | if 조건: break |
continue |
현재 반복 건너뛰기 | if 조건: continue |
else |
while 정상 종료 시 실행 |
while 조건: ... else: ... |
while
문은 특정 조건이 만족될 때까지 실행되므로, 종료 조건을 명확히 설정하는 것이 중요하다.
기본 구조
while 조건:
실행할 코드
조건
이 참(True)이면 블록 내부의 코드가 실행된다.- 실행이 끝나면 다시
조건
을 검사하며, 조건이 거짓(False)이 될 때까지 반복한다.
= 0
count
while count < 5: # count가 5보다 작을 때까지 반복
print("반복 중:", count)
+= 1 # count 값을 증가시켜 반복 조건을 변경 count
반복 중: 0
반복 중: 1
반복 중: 2
반복 중: 3
반복 중: 4
count
가 5가 되면count < 5
조건이 거짓(False)이므로 반복문이 종료된다.
무한 루프
while True
를 사용하면 무한 루프가 생성된다. 특정 조건을 만족하면 break
문을 사용하여 종료해야 한다.
while True:
= input("종료하려면 'exit' 입력: ")
answer if answer == "exit":
print("반복문 종료")
break # 루프 종료
- 사용자가
"exit"
을 입력하면break
가 실행되어 루프가 종료
break 문을 이용한 반복문 종료
break
문은 조건을 만족하면 반복문을 즉시 종료한다.
= 1
num
while num <= 10:
print(num)
if num == 5: # num이 5가 되면 루프 종료
break
+= 1 num
1
2
3
4
5
continue 문을 이용한 반복 건너뛰기
continue
문은 특정 조건을 만나면 현재 반복을 건너뛰고 다음 반복으로 이동한다.
= 0
num
while num < 5:
+= 1
num if num == 3: # num이 3이면 건너뛰기
continue
print(num)
1
2
4
5
num == 3
일 때continue
가 실행되므로print(num)
이 실행되지 않음
else 블록 사용
while
문이 정상적으로 종료되었을 때(즉, break
없이 종료) 실행된다.
= 1
num
while num < 5:
print(num)
+= 1
num else:
print("반복이 정상적으로 종료됨")
1
2
3
4
반복이 정상적으로 종료됨
num
이 5가 되어while
조건이False
가 되면else
블록이 실행- 만약
break
로while
을 중단하면else
블록은 실행되지 않음
= 1
num
while num < 5:
print(num)
if num == 3:
break # 루프 강제 종료
+= 1
num else:
print("반복이 정상적으로 종료됨") # 실행되지 않음
1
2
3
num == 3
일 때break
가 실행되었으므로else
블록은 실행되지 않음
while 문 활용 예제
사용자 입력을 받을 때까지 반복
= "python123"
password
while True:
= input("비밀번호를 입력하세요: ")
user_input if user_input == password:
print("비밀번호가 올바릅니다!")
break
print("비밀번호가 틀렸습니다. 다시 입력하세요.")
- 올바른 비밀번호를 입력할 때까지 반복한다.
숫자 맞히기 게임
import random
= random.randint(1, 10) # 1부터 10 사이의 난수 생성
target
while True:
= int(input("숫자를 맞혀보세요 (1~10): "))
guess 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 사용
= 0
count
while count < 10:
print(count)
if count == 5:
break # count가 5일 때 루프 종료
+= 1 count
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 사용
= 0
count
while count < 5:
+= 1
count 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 사용
= 0
count
while count < 5:
print(count)
+= 1
count 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
예외를 발생시킨다. 주로 디버깅이나 테스트용으로 사용된다.
= 10
x assert x > 0 # 정상 실행됨
= -5
y 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
없이 리소스를 안전하게 정리 가능