TIL (Today I Learned) - 2026.03.04
Python 제어문, 반복문, 연산자 심화 학습
1. 부정 조건식으로 빈 컨테이너 체크하기
Python에서 빈 리스트, 빈 문자열, 0 같은 falsy 값은 조건문에서 False로 평가된다.
not을 활용하면 이를 간결하게 표현할 수 있다.
c = []
if not c:
print("c에 멤버가 없습니다")
- [] → falsy (False로 평가)
- not [] → True
- 0 → falsy, not 0 → True
포인트: if c == [] 또는 if len(c) == 0 보다 if not c가 Pythonic한 표현이다.
2. == vs is — 값 비교 vs 객체 비교
a = [1, 2, 3]
b = list(a) # a를 복사하여 새 객체 생성
print(a == b) # True → 데이터 값이 같다
print(a is b) # False → 서로 다른 객체 (메모리 주소가 다르다)
연산자 비교 대상 결과
| == | 값 (value) | 같으면 True |
| is | 객체 주소 (identity) | 동일 객체면 True |
주의: is는 None 체크(if x is None)에 주로 사용하고, 일반 값 비교에는 ==을 사용한다.
3. while True 무한루프와 탈출 조건
무한루프를 사용할 때는 반드시 break 탈출 조건이 필요하다.
while True:
coffee_price = int(input("> 주문 총액을 입력하세요\n").strip())
print(f"당신이 입력한 금액은 {coffee_price}입니다.")
if not coffee_price: # 0 입력 시 탈출 (0은 falsy)
break
응용 예시 — 커피 결제 프로그램
customer_money = 5000
if coffee_price > customer_money:
print(f"{coffee_price - customer_money}원이 부족합니다.")
elif coffee_price < customer_money:
print(f"결제 완료. 잔액은 {customer_money - coffee_price}원입니다.")
customer_money -= coffee_price
else:
print("결제 완료. 잔액은 0원입니다.")
customer_money -= coffee_price
4. 삼항 연산자 (Ternary Operator)
Python의 삼항 연산자는 한 줄로 조건에 따른 값을 할당할 수 있다.
# 기본 형태
변수 = 참일 때 값 if 조건식 else 거짓일 때 값
# 실제 사용 예시
msg = "구매 가능" if customer_money > coffee_price else "구매 불가"
팁: (조건식 and 참 or 거짓) 패턴도 있지만, 가독성이 좋은 if~else 형태를 권장한다.
5. 튜플 언패킹 (Tuple Unpacking)
반복문에서 튜플 데이터를 변수에 직접 분해하여 가독성을 높일 수 있다.
datas = [(1, 2), (3, 4), (5, 6)]
# 기본 방식
for data in datas:
print(f"첫 번째값 {data[0]}, 두 번째값 {data[1]}")
# 언패킹 활용
for 온도, 습도 in datas:
print(f"온도: {온도}, 습도: {습도}")
# 특정 값만 필요할 때 → _ 로 불필요한 변수 무시
for _, 습도 in datas:
print(f"습도: {습도}")
6. 딕셔너리 리스트 순회
ktx_stations = [
{"name": "광명역", "age": 30},
{"name": "영등포역", "age": 70},
]
for ktx_station in ktx_stations:
print(f'{ktx_station["name"]}의 년식은 {ktx_station["age"]}년')
7. enumerate() — 인덱스와 함께 순회
enumerate()는 반복 시 자동으로 인덱스를 부여한다.
for index, (k, v) in enumerate(ktx_station.items()):
print(index, k, v)
# 출력 예시:
# 0 name 광명역
# 1 age 30
8. 중첩 for문 — 구구단 구현
포맷 지정자 :>2
print(f"{값:>2}") # 오른쪽 정렬, 2자리 폭
구구단 조건 필터링 예제
요구사항
- 3~6단 출력
- 5단 제외
- 3×3, 4×4, 6×6 제외
# 처음 작성한 코드
for i in range(3, 7):
if i == 5:
pass
else:
for j in range(1, 10):
if i == j == 3 or i == j == 4 or i == j == 6:
pass
else:
print(f"{i} * {j} = {i*j}")
# 리팩토링 — 부정 조건으로 더 간결하게
for i in range(3, 7):
if i != 5: # 5단 제외
for j in range(1, 10):
if i != j: # i == j인 경우(3×3, 4×4, 6×6) 제외
print(f"{i} * {j} = {i*j:>2}")
배운 점: pass를 쓰는 if 예외조건 패턴보다, if 정상조건으로 조건을 반전시키면 코드가 훨씬 간결해진다.
오늘의 핵심 정리
개념 요약
| not c | falsy 값(빈 리스트, 0 등) 체크 |
| == vs is | 값 비교 vs 객체 동일성 비교 |
| while True + break | 무한루프 탈출 조건 필수 |
| 삼항 연산자 | 값 if 조건 else 값 |
| 튜플 언패킹 | for a, b in list |
| enumerate() | 인덱스 자동 부여 |
| 포맷 :>2 | 오른쪽 정렬, 2자리 너비 |
'TIL' 카테고리의 다른 글
| [API] 기상청 API 이용방법 (0) | 2026.03.08 |
|---|---|
| [TIL] 26-03-05 (0) | 2026.03.05 |