Supplementary Materials

0. 제어문 개요

Python 프로그램

  • 상황에 따라 다르게 동작하는 분기(branching)
  • 작업을 반복하는 반복(iteration)

제어문

  • 조건문
    • if-else문 중첩 if문, 연속 if문
    • 관계 연산자, 조건 연산자, 논리 연산자
  • 반복문
    • for문(횟수)
    • while문(조건) 무한 루프
    • 중첩 반복문

제어 구조

  • 프로그램의 실행 순서를 제어하는 구조로 크게 3가지가 있다.
  1. 순차 구조(Sequential): 명령어가 위에서 아래로 순서대로 실행되는 구조
  2. 선택 구조(Selection): 조건에 따라 실행할 명령을 선택하는 구조 (이번 장의 핵심)
  3. 반복 구조(Repetition): 특정 명령을 반복해서 실행하는 구조

1. 비교 연산과 논리 연산

조건문에 사용되는 연산이다. 비교식과 논리식의 결과는 True 또는 False이다.

1.1. 비교 연산자

두 값을 비교한다.

연산자의미
>크다
>=크거나 같다
<작다
<=작거나 같다
==같다
!=다르다
sleep_time = 8
pset_time = 15
 
print(sleep_time > pset_time)  # False

주의사항

  • 문자열 비교: 사전 순서로 비교된다.
  • 실수 비교: 부동소수점 오차로 인해 == 대신 abs(a - b) < 0.00001과 같이 차이가 매우 작은지 확인하는 방식을 권장한다.
  • cf. sqrt(3.0)**2는 3.0과 같지 않다.

1.2. 논리 연산자

여러 조건을 결합할 때 사용한다.

  • not a: 참과 거짓을 반대로 바꿈
  • a and b: 둘 다 참일 때만 True
  • a or b: 하나 이상 참이면 True
derive = True
drink = False
 
both = drink and derive
print(both)  # False

드모르간의 법칙

  • not (A and B)(not A) or (not B)와 같다.
  • 복잡한 논리식을 단순화할 때 사용한다.
# 드모르간의 법칙을 사용하여 이러한 논리식을 단순화할 수 있다.
if country != “한국” or province == “제주” :
	shipping_cost = 8000

1.3. 조건 연산자

조건 연산자(Ternary Operator)

  • 간단한 if-else 문을 한 줄로 표현할 때 사용한다.
  • 변수 = (참 값 if 조건 else 거짓 값)
# if-else문
if price > 20000 :
	shipping_cost = 0
else :
	shipping_cost = 3000
 
# 조건 연산자
shipping_cost = ( 0 if price >= 20000 else 3000 )

2. 조건문과 분기

조건문을 사용하면 조건에 따라 서로 다른 코드를 실행할 수 있다.

  • 조건식(condition)이 True이면 if 블록을, False이면 else 블록을 실행한다.
  • if·elif·else는 조건에 따라 실행 경로를 선택한다.
  • 거짓일 때 실행할 문장이 없다면 else 절은 생략 가능하다.
if condition:
    # condition이 True일 때 실행
elif another_condition:
    # 앞 조건은 False이고 이 조건이 True일 때 실행
else:
    # 모든 조건이 False일 때 실행

cf.

  • 콜론(:)은 복합문을 의미한다.
  • pass 키워드는 “나중에 채워 넣겠음”을 의미한다.

예제

x = float(input("Enter a number for x: "))
y = float(input("Enter a number for y: "))
 
if x == y:
    print("x and y are equal")
    if y != 0:
        print("therefore, x / y is", x / y)
elif x < y:
    print("x is smaller")
else:
    print("y is smaller")
 
print("thanks!")

실행 흐름은 다음과 같다.

  1. x == y이면 첫 번째 블록 실행
  2. 그렇지 않고 x < y이면 두 번째 블록 실행
  3. 둘 다 아니면 x > y이므로 else 실행
  4. 마지막 print("thanks!")는 조건문 바깥이므로 항상 실행

===

초보자가 특히 주의해야 하는 차이이다.

  • =: 변수에 값을 저장하는 대입 연산자
  • ==: 두 값이 같은지 검사하는 비교 연산자
x = 3   # x에 3 저장
x == 3  # x가 3인지 검사

블록과 들여쓰기

Python에서는 들여쓰기(indentation)가 코드 블록(block)을 정의한다.

  • 들여쓰기가 같은 문장들이 하나의 블록을 형성한다.
if x == y:
    print("같다")  # 조건문 안
print("검사 완료")  # 조건문 밖

들여쓰기가 잘못되면 실행 흐름이 달라지거나 오류가 발생한다.

3. 확장 조건문

3.1. 연속 if 문(if-elif-else)

  • 조건이 여러 개일 때 사용 (다중 선택)
    • 예: 성적 처리 (90점 이상 A, 80점 이상 B, …), 수온에 따른 물의 상태 등
    • 파이썬에는 타 언어의 switch 문이 없으므로 주로 elif를 사용한다.

3.2. 중첩 if 문(Nested if)

  • if 문 안에 또 다른 if 문이 들어가는 구조
    • 예: 배송지가 ‘한국’이면서 가격이 ‘2만원 이상’인 경우 등 복합적인 조건을 단계별로 검사할 때 사용