제어문은 프로그램이 위에서 아래로 순차적으로 실행되는 기본 흐름을 변경하여, 특정 조건에 따라 코드를 건너뛰거나 반복 실행하게 만드는 핵심 구문입니다.
주어진 조건식이 참(True)인지 거짓(False)인지에 따라 실행할 코드 블록을 결정합니다.
특정 코드 블록을 원하는 횟수만큼 또는 조건이 만족될 때까지 반복해서 실행합니다.
True)인 동안 무한히 반복하며, 조건이 거짓이 되면 종료합니다.Tip: 모든 제어문은 콜론(
:)으로 시작하며, 실행될 실행문들은 반드시 동일한 너비의 인덴트(들여쓰기)로 묶여 있어야 합니다.
파이썬은 들여쓰기(Indentation)를 문법적으로 강제하며, 동일 블록은 반드시 들여쓰기가 일치해야 합니다.
if 조건식1:
# 조건식1이 참일 때 수행
elif 조건식2:
# 조건식2가 참일 때 수행
else:
# 위 조건들이 모두 거짓일 때 수행비교 연산자: >, >=, <, <=, !=, == (결과는 항상 True/False)
논리 연산자:
and: 둘 다 참이어야 참or: 하나만 참이어도 참not: 논리값 반전^ (XOR): 두 값이 다르면 참, 같으면 거짓범위 간소화: 0 <= score <= 100과 같이 연속적인 비교가 가능.
파이썬에서는 bool 외에도 객체의 상태에 따라 조건식에서 참/거짓을 판정합니다.
| 타입 | 참 (True) | 거짓 (False) |
|---|---|---|
| 숫자 | 0이 아닌 숫자 (1, -1, 0.5) | 0, 0.0 |
| 문자열 | 비어 있지 않은 문자열 ("abc", " ") | "" (빈 문자열) |
| 리스트 | 요소가 있는 리스트 [1] | [] (빈 리스트) |
| 딕셔너리 | 요소가 있는 딕셔너리 {"a": 1} | {} (빈 딕셔너리) |
| 기타 | - | None (무조건 거짓) |
논리 연산 시 결과가 확정되면 나머지 연산을 생략하고 그 최종 평가값을 리턴합니다.
or): 왼쪽이 참이면 왼쪽 값 리턴, 거짓이면 오른쪽 값 리턴120 or "" → 1200 or 100 → 100AND (and): 왼쪽이 참이면 오른쪽 값 리턴, 거짓이면 왼쪽 값 리턴
"Hello" and 555 → 555[] and "Hi" → []활용:
(a % 2 == 0) or print('홀수') #(앞이 거짓일 때만 실행)
간단한 분기 로직을 한 줄로 표현합니다.
(참일 때 값) if (조건식) else (거짓일 때 값)# 절대값(차이) 구하기
diff = (a - b) if a > b else (b - a)
# 변수 대입
result = 'Positive' if a > 0 else 'Zero or Negative'
조건식이 참(True)인 동안 블록 내부의 문장을 반복 수행합니다.
while (조건식):
수행할 문장1
수행할 문장2
else:
루프의 조건식이 거짓(`False`)이 되어 루프가 정상적으로 종료될 때
else 블록이 실행됩니다.
핵심 체크포인트
무한 루프와 break/continue
break: 가장 가까운 순환문을 강제로 즉시 종료.continue: 아래 문장을 건너뛰고 순환문의 처음(조건식 확인)으로 돌아감.while True:: 특정 조건에서 break를 만날 때까지 무한히 반복.파이썬의 for문은 iterable 객체(리스트, 튜플, 문자열, range 등)의 요소를 하나씩 꺼내며 반복합니다.
for 변수 in iterable객체:
수행할 문장
range(stop): 0부터 stop-1까지의 숫자 생성range(start, stop, step): 시작, 끝, 증감 지정key를 추출 (.items() 사용 시 key, value 쌍 추출)예제
my_dict = {'name':'hong', 'age':24, 'grade':4}
for key in my_dict: # [실행 결과]
print(key) # name
# age
# grade
my_dict.keys() # dict_keys(['name', 'age', 'grade'])
my_dict.values() # dict_values(['hong', 24, 4])
my_dict.items() # dict_items([('name', 'hong'), ('age', 24), ('grade', 4)])
#리스트에 담기
keys_list = list(my_dict.keys()) # 결과: ['name', 'age', 'grade']
#.items()활용
for item in my_dict.items(): # [실행 결과]
print(item) # ('name', 'hong')
# ('age', 24)
# ('grade', 4)
#언패킹하기
for key, value in my_dict.items(): # [실행 결과]
print(f"{key} : {value}") # name : hong
# age : 24
# grade : 4
#첫 번째 순환: ('name', 'hong')을 꺼냄
#key, value = ('name', 'hong') 대입 발생 (Tuple Unpacking)
#key는 'name', value는 'hong'이 됨
순환문을 더욱 강력하고 직관적으로 만들어주는 내장 함수입니다.
(인덱스, 데이터) 쌍의 튜플들을 담은 객체를 리턴합니다.animals = ['dog', 'cat', 'bird', 'puppy', 'kitty']
# 1. 튜플 통째로 받기 (x는 (0, 'dog') 형태)
for x in enumerate(animals):
print(x)
#(0, 'dog')
#(1, 'cat')
#(2, 'bird')
#(3, 'puppy')
#(4, 'kitty')
# 2. 언패킹으로 받기 (가장 권장됨)
# 시작 번호를 10으로 지정 (기본값은 0)
for idx, animal in enumerate(animals, 10):
print(f"{idx} - {animal}")
# [출력 결과]
# 10 - dog
# 11 - cat
# 12 - bird ...
nums = [10, 20, 30]
chars = ('a', 'b', 'c')
# 1. list()로 변환해서 확인해보기
list(zip(nums, chars))
# 결과: [(10, 'a'), (20, 'b'), (30, 'c')]
# 2. 반복문에서 활용 (병렬 처리)
for n, c in zip(nums, chars):
print(f"숫자: {n}, 문자: {c}")
# [출력 결과]
# 숫자: 10, 문자: a
# 숫자: 20, 문자: b
# 숫자: 30, 문자: c
순환문 안에 순환문을 넣어 다차원 데이터를 처리합니다. (예: 구구단)
# 2단 ~ 9단 출력 예시
dan = 2
while dan <= 9:
mul = 1
while mul <= 9:
print(f"{dan} x {mul} = {dan * mul}")
mul += 1
dan += 1
컴프리헨션은 기존의 반복 가능한(Iterable) 객체를 바탕으로 새로운 리스트, 세트, 딕셔너리를 빠르고 간결하게 생성하는 파이썬 특유의 문법입니다.
| 종류 | 구문 | 결과 타입 |
|---|---|---|
| List Comprehension | [표현식 for 항목 in iterable if 조건] | list |
| Set Comprehension | {표현식 for 항목 in iterable if 조건} | set |
| Dict Comprehension | {K:V for K, V in iterable if 조건} | dict |
| Generator Expression | (표현식 for 항목 in iterable if 조건) | generator |
[ ]리스트 내부에서 for문과 if문을 사용하여 간결하게 새 리스트를 생성합니다.
a = [1, 2, 3, 4]
# 1. 기본 생성: [3, 6, 9, 12]
[num * 3 for num in a]
# 2. 조건문 포함 (짝수만): [6, 12]
[num * 3 for num in a if num % 2 == 0]
# List의 경우: [0, 1, 2, 0, 1, 2, 0, 1, 2, 0] (중복 포함)
[num % 3 for num in range(10)]
# Set의 경우: {0, 1, 2} (중복 제거)
{num % 3 for num in range(10)}
# 1. 숫자:나머지 쌍 생성: {0: 0, 1: 1, 2: 2, 3: 0, ...}
{num: num % 3 for num in range(10)}
# 2. 기존 딕셔너리 활용 및 필터링
fruits = {"peach": 10000, "apple": 4000, "banana": 6000}
# banana 제외하고 생성
{k: v for k, v in fruits.items() if k != 'banana'}
# 3. Key와 Value 뒤집기 (Inverting a Dictionary)
# {10000: 'peach', 4000: 'apple', 6000: 'banana'}
{v: k for k, v in fruits.items()}