SK플래닛 ai활용 데이터엔지니어 과정 2기/파이썬

파이썬 - 흐름제어(1)

dev-lee 2026. 3. 4. 16:58

개요

 

  • 흐름제어
    • 참고
      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까지 체크 후 결론 도출해야 함
  - ~이고

 

 

AND, OR, XOR

 

 

 

기타

  • 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 거짓일 때 값
  
- 삼항연산자 표현은 섞어서 여러 조건을 표현할 수 있음(선택적)