개요
- 흐름제어
- 참고
xx문, 함수 선언, 클래스 - 해당 명칭으로 불리는 표현의 첫줄 끝에는 ':'을 붙인다 - 엔터를 치면 자동으로 들여쓰기(tab이 삽입됨) -> 코드블럭이 구성됨 - ex) 반복문, 조건문, with문, 예외처리문, define, ... - 변수의 scope(범위, 전역, 지역 등) 개념이 반영됨(함수, 클래스에서 반영)- 제어문
- 조건문, 반복문
- 코드의 실행(전개) 흐름을 컨트롤한다.
- 일반적 실행
- 1번 라인 실행
- 2번 라인 실행
- 3번 라인 실행 . . .
- n번 라인 실행 -> 종료
- 흐름 제어
- 1번 라인 실행 . . .
- 5번 라인 실행 -> 점프(조건에 따라)
- 9번 라인 실행 -> 반복(조건에 따라)
- 9번 라인 실행
- n번 라인 실행 -> 종료
- 이를 통해서 원하는 목적(요구사항)을 효율적으로 달성
xxx .....: ..... ........ .... ...... .......... <- xxx문을 빠져나왔다(들여쓰기가 없으면 됨)
조건식
- 특징
- 조건문, 반복문 구동(실행)되게 하는 기본 전제 조건
- numpy, pandas 등 데이터를 천처리하는 패키지에서 불리언 인덱싱 사용 시 활용
- 기타 필요 시
- 결론
- 조건식의 최종값은 True or False (boolean형)
연산자
값 vs 값
A == B : A와 B는 값이 일치하는가? 체크
A != B : A와 B는 값이 다른가? 체크
A > B : A와 B보다 큰가(초과)? 체크
A < B : A와 B보다 작은가(미만)? 체크
A >= B : A와 B보다 크거나 같은가(이상)? 체크
A <= B : A와 B보다 작거나 같은가(이하)? 체크
not A : A의 값을 부정한다
- 부정 상황을 체킹할때 사용
- 코드 전개 초반에 특정 상황을 배제시킬때 주로 사용
조건식 vs 조건식
- 조건식 C1, C2 정의
C1 연산자 C2
- 조합
C1 or C2 : C1, C2 중 하나라도 참이면 참
- C1이 참이면 그대로 조건식 종료
- C2까지 체크할 필요가 없음(무조건 참)
- C1이 거짓이면, C2까지 체크 후 결론 도출해야 함
- ~(이)거나
C1 and C2 : C1, C2 둘 다 참이어야 참
- C1이 거짓이면 그대로 조건식 종료
- C2까지 체크할 필요가 없음(무조건 거짓)
- C1이 참이면, C2까지 체크 후 결론 도출해야 함
- ~이고

기타
- A is B
- A는 B인가? -> 객체를 관리하는 id값을 비교하는 연산자
- 동일 객체를 가리키고 있는가?
- a in A
- A 안에 멤버로 a가 존재하는가?
실습
# 값 vs 값
a = 10
b = 11
a == b, a != b, a > b, a < b, a >= b, a <= b, not a
결과값 : (False, True, False, True, False, True, False)
# 조건식 vs 조건식
# a는 b보다 작거나 a는 b와 같다
# (a == b는 파악하지 않음. 앞에서 결과가 이미 참이므로 그대로 종료됨)
a < b or a == b, (a < b) or (a == b) # 묶어줘도 됨
결과값 : (True, True)
# a 와 b는 다르므로 False -> 그대로 종료됨.
a == b and a < b
결과값 : False
c = []
# c에 멤버가 없다면 -> 조건식으로 구현(부정상황을 체크한다)
if not c :
print('The list is empty')
결과값 : The list is empty
----------------------------------------------------
not c
결과값 : True
----------------------------------------------------
len(c) == 0
결과값 : True
a = [1,2,3]
b = list(a)
#클래스와 객체 개념을 정의하고 다시 체크
# a == b : True => 실제값 비교
# a is b : False => 객체의 주소를 비교 (같은 객체인가?)
# list는 mutable
a, b, a == b, a is b, id(a), id(b)
결과값 : ([1, 2, 3], [1, 2, 3], True, False, 134242439126912, 134242437414784)
-------------------------------------------------------------------------------
a = 1
b = a
# 정수는 immutable이기 때문에 복사해도 id값이 바뀌지 않음
a, b, a ==b, a is b, id(a), id(b)
결과값 : (1, 1, True, True, 11654376, 11654376)
-------------------------------------------------------------------------------
a = (1,2,3)
b = a
# tuple은 immutable이기 때문에 복사해도 id값이 바뀌지 않음
a, b, a == b, a is b
결과값 : ((1, 2, 3), (1, 2, 3), True, True)
| Class | 설명 | 구분 |
| list | 순서가 있는 객체 집합 | mutable |
| set | 순서가 없는 고유한 객체 집합 | mutable |
| dict | Key와 Value가 맵핑된 객체, 순서 없음 | mutable |
| bool | True, False | immutable |
| int | 정수 | immutable |
| float | 실수 | immutable |
| tuple | 순서가 있는 객체 집합, 읽기 전용 | immutable |
| str | 문자열 | immutable |
| frozenset | Immutable Set | immutable |
조건문(if문 -> :, 들여쓰기(코드 블럭 개념) 사용)
- 요구사항/기능정의서등등 에서 아래 텍스트가 보이면 적용
- ~ 하면
- case
# 상황(조건, 컨디션) 1개
if 조건식:
수행문(statements) or pass(수행x,자리만 차지)
# 상황(조건, 컨디션) 2개
if 조건식:
수행문(statements) or pass(수행x,자리만 차지)
else:
수행문(statements) or pass(수행x,자리만 차지)
if 조건식:
수행문(statements) or pass(수행x,자리만 차지)
elif 조건식:
수행문(statements) or pass(수행x,자리만 차지)
# 상황(조건, 컨디션) 2개 이상
if 조건식:
수행문(statements) or pass(수행x,자리만 차지)
elif 조건식: <- 필요한 만큼 추가
수행문(statements) or pass(수행x,자리만 차지)
....
else:
수행문(statements) or pass(수행x,자리만 차지)
아래는 조건문 실습이다.
#POS 상황으로 구현
while True: # 무한루프 -> exit(탈출) 코드가 반드시 필요하다
# input() 함수는 내장함수, 사용자 입력 무한대기(블락킹), 표준입력, 콘솔/웹 대기
# 엔터키를 치면 입력값이 반환되어서 종료됨
# 사용자로부터 주문 총액을 입력받는다(가정)
print('-'*30)
# int()로 문자열을 정수로 변환, strip()으로 혹시 모를 양쪽 공백 제거
# strip()함수는 이스케이프문자도 다 날림
coffee_price = int(input('> 주문 총액을 입력하세요\n').strip())
print(f'당신이 입력한 금액은 {coffee_price}입니다. {type(coffee_price)}')
# break를 감싸고 있는 가장 가까운 반복문 탈출
# 조건 : 입력값이 0이면 탈출(반복문 종료)
if not coffee_price : # 0이라는 부정상황을 잡는 조건식 -> not 쓰면 됨
print('구매하지 않았으므로 종료합니다.')
break
결과값 :
> 주문 총액을 입력하세요
4000
당신이 입력한 금액은 4000입니다. <class 'int'>
------------------------------
> 주문 총액을 입력하세요
3000
당신이 입력한 금액은 3000입니다. <class 'int'>
------------------------------
> 주문 총액을 입력하세요
0
당신이 입력한 금액은 0입니다. <class 'int'>
구매하지 않았으므로 종료합니다.
아래는 조건을 추가한 실습이다.
#POS 상황으로 구현
customer_money = int(input('> 보유 금액을 입력하세요\n').strip())
while True:
coffee_price = int(input('> 주문 총액을 입력하세요\n').strip())
if not coffee_price : # 종료 처리(탈출 코드)
break
#핵심 구현
'''
조건문을 다음 상황에 맞게 구현하시오
주문 총액이 보유 금액을 초과
메시지 출력 : 결제 실패, x원이 부족합니다.
주문 총액이 보유 금액의 미만
메시지 출력 : 결제 완료, 잔액이 x원입니다.
주문 총액이 보유 금액과 일치
메시지 출력 : 결제 완료, 잔액이 0원입니다.
'''
not_enough = coffee_price-customer_money
change = customer_money-coffee_price
if coffee_price > customer_money: # 초과
print(f'결제 실패, {not_enough}원이 부족합니다, 잔액이 {customer_money}원입니다.')
elif coffee_price < customer_money: # 미만
print(f'결제 완료, 잔액이 {change}원입니다.')
#잔액 업데이트
customer_money -= coffee_price
else : # 일치 사실 의미없는 코드
print(f'결제 완료, 잔액이 {change}원입니다.')
customer_money -= coffee_price
break
결과값 :
> 보유 금액을 입력하세요
4000
> 주문 총액을 입력하세요
6000
결제 실패, 2000원이 부족합니다, 잔액이 4000원입니다.
> 주문 총액을 입력하세요
3000
결제 완료, 잔액이 1000원입니다.
> 주문 총액을 입력하세요
1000
결제 완료, 잔액이 0원입니다.
삼항연산자
- 공식 지원은 X
- 대체 표현으로 구성
- 적용 조건
- 조건 2개 (이분법적 상황)
- 수행문의 결과로 특정 변수에 값 세팅하는 패턴
- 강점
- 표현 간결, 한줄로 표기, 직관적
# 원문 코드
customer_money = 5000
coffee_price = 2000
if customer_money >= coffee_price :
msg = '구매 가능'
else :
msg = '구매 불가'
msg
결과값 : '구매 가능'
-------------------------------------------------
# 수행문이 1개이면 이런 식으로 옆으로 배치 가능(모양만 이쁨)
# n개라면 ;으로 구분하여 옆으로 배치 가능
if customer_money >= coffee_price: msg = '구매 가능'
else: msg = '구매 불가'
-------------------------------------------------
# 삼항 연산자 개념 적용하여 표현
# 자바의 삼항 연산자와 비슷, 순서가 다름
msg = '구매 가능' if customer_money >= coffee_price else '구매 불가'
msg
결과값 : '구매 가능'
- 삼항 연산자 표현
- 주로 사용 : 변수 = 참일 때 값 if 조건식 else 거짓일 때 값
- 잘 사용 X, 경우에 따라 오작동 가능성 있음(값에 따라)
변수 = 조건식 and 참일 때 값 or 거짓일 때 값
- 삼항연산자 표현은 섞어서 여러 조건을 표현할 수 있음(선택적)
'SK플래닛 ai활용 데이터엔지니어 과정 2기 > 파이썬' 카테고리의 다른 글
| 파이썬 - 흐름제어(3) (0) | 2026.03.05 |
|---|---|
| 파이썬 - 흐름제어(2) (0) | 2026.03.04 |
| 파이썬-문법공통_타입(3) (0) | 2026.03.03 |
| 파이썬 - 문법공통_문법(2) (0) | 2026.03.03 |
| 파이썬 - 문법공통_타입(1) (0) | 2026.02.27 |