Home [파이썬 프로그래밍 기초] 6강 - 선택 구조
Post
Cancel

[파이썬 프로그래밍 기초] 6강 - 선택 구조

💡해당 게시글은 방송통신대학교 정재화 교수님의 '파이썬 프로그래밍 기초' 강의를 개인 공부 목적으로 메모하였습니다.



학습 목표


  • 선택 구조를 설명할 수 있음
  • 비교 연산자와 논리 연산자를 사용하여 불리언 식을 작성할 수 있음



주요 용어


  • 선택 구조
    • 특정 영역 내의 명령문에 대한 실행 여부를 판단에 따라 결정하는 구조
  • 불리언 타입
    • 논리 값인 참(True)과 거짓(False)의 값만 표현할 수 있는 데이터 타입
  • 불리언 식
    • 비교 연산자를 사용하여 결과가 불리언 타입으로 생성되는 표현 식
  • 논리 연산자
    • 두 개의 논리 값(불리언 식)을 연산하여 참 또는 거짓을 결과로 얻는 연산자



강의록


선택 구조

선택 구조의 개념

  • 특정 영역 내의 명령문에 대한 실행 여부를 판단에 따라 결정하는 구조
    • 실행 여부는 조건에 따라 결정

      image.png

선택 구조의 구문 형식

  • 구문 형식

    image.png

    • 들여 쓰기는 코드 블록을 표현
    • 특정 동작을 수행하는 한 라인 이상의 명령문의 집합
    • 스페이스 4칸 권고(PEP-8)

선택 구조의 실행 흐름

image.png

불리언 식

  • 비교 연산자를 사용하여 결과가 불리언 타입으로 생성되는 표현 식

    연산자수학적 표현의미
    <<작음
    <=작거나 같음
    >>
    >=크거나 같음
    ===같음
    !=같지 않음

불리언 타입

  • 논리 값인 참(True)과 거짓(False)의 값만 표현할 수 있는 데이터 타입
    • True 또는 False 예약어를 사용하여 표현
    • 비교 연산자를 사용한 표현 식의 결과로 생성
    1
    
      3 > 6
    
    1
    
      light_on = 3 > 6
    
    1
    
      suf == vol
    
    1
    
      isStop = suf == vol
    

원뿔 계산 프로그램 개선

  • 사용자가 반지름 값에 음수를 입력하면?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
      # 반지름 사용자 입력
      rad = int(input("반지름을 입력하세요: "))
        
      # 높이 사용자 입력
      hei = int(input("높이를 입력하세요: "))
        
      # 부피 & 겉넓이 계산
      vol = 1/3 * 3.14 * rad ** 2 * hei
      suf = 3.14 * rad ** 2 + 3.14 * rad * hei
      print("원뿔의 부피는", vol, "입니다.")
      print("원뿔의 겉넓이는", suf, "입니다.")
    

논리 연산자

논리 연산자의 개념

  • 두 개의 논리 값(불리언 식)을 연산하여 참 또는 거짓을 결과로 얻는 연산자
    • 참, 거짓을 구별할 수 있는 명제를 대상으로 명제의 집합을 위해 고안한 연산자
    • 두 개의 피연산자를 갖는 이항 연산자
    • and(논리곱), or(논리합), not(논리부정) 연산자 사용
    • 왼쪽에서 오른쪽의 방향으로 결합

and

  • 두 논리 값이 모두 True 일 때 True이고 어느 하나 False일 경우 False를 반환
  • 진리표

    b1b2b1 and b2
    FalseFalseFalse
    FalseTrueFalse
    TrueFalseFalse
    TrueTrueTrue
    1
    
      temp >= 27 and fruit == "apple"
    
    1
    
      rad > 0 and hei > 0
    

or

  • 두 논리 값이 모두 False 일 때 False이고 어느 하나 True일 경우 True를 반환
  • 진리표

    b1b2b1 or b2
    FalseFalseFalse
    FalseTrueTrue
    TrueFalseTrue
    TrueTrueTrue
    1
    
      temp >= 27 or fruit == "apple"
    
    1
    
      rad > 0 or hei > 0
    

not

  • 단항 연산자로 논리 값을 반전하여 False는 True로, True는 False로 반환
  • 진리표

    b1Not b1
    FalseTrue
    TrueFalse
    1
    
      not temp >= 21
    

단락 평가

  • short-circuit evaluation
  • 첫 번째 논리 값 만으로 전체 연산 결과가 판별 가능할 때 두 번째 논리 값은 확인(평가)하지 않는 기법

    1
    
      temp >= 27 and season == "summer"
    
    1
    
      temp >= 27 or season == "summer"
    

원뿔 계산 프로그램 개선

  • 사용자가 높이에 음수를 입력하면?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
      # 반지름 사용자 입력
      rad = int(input("반지름을 입력하세요: "))
        
      # 높이 사용자 입력
      hei = int(input("높이를 입력하세요: "))
        
      if (rad > 0):
          # 부피 & 겉넓이 계산
          vol = 1/3 * 3.14 * rad ** 2 * hei
          suf = 3.14 * rad ** 2 + 3.14 * rad * hei
          print("원뿔의 부피는", vol, "입니다.")
          print("원뿔의 겉넓이는", suf, "입니다.")
    

선택 구조의 확장

원뿔 계산 프로그램 문제

  • 사용자가 반지름과 높이 값에 양수를 입력할 경우 부피 겉넓이 출력

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
      # 반지름 사용자 입력
      rad = int(input("반지름을 입력하세요: "))
        
      # 높이 사용자 입력
      hei = int(input("높이를 입력하세요: "))
        
      if (rad > 0 and hei > 0):
          # 부피 & 겉넓이 계산
          vol = 1/3 * 3.14 * rad ** 2 * hei
          suf = 3.14 * rad ** 2 + 3.14 * rad * hei
          print("원뿔의 부피는", vol, "입니다.")
          print("원뿔의 겉넓이는", suf, "입니다.")
    

이분 선택 구조의 구문 형식

image.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 반지름 사용자 입력
rad = int(input("반지름을 입력하세요: "))

# 높이 사용자 입력
hei = int(input("높이를 입력하세요: "))

if (rad > 0 and hei > 0):
    # 부피 & 겉넓이 계산
    vol = 1/3 * 3.14 * rad ** 2 * hei
    suf = 3.14 * rad ** 2 + 3.14 * rad * hei
    print("원뿔의 부피는", vol, "입니다.")
    print("원뿔의 겉넓이는", suf, "입니다.")
else:
    print("반지름과 높이에 양수를 입력해주세요")

다분 선택 구조의 구문 형식

  • 구문 형식

    image.png

다분 선택 구조의 실행 흐름

image.png

가장 큰 수를 찾는 프로그램

  • 세 수 A, B, C를 입력 받고 그 중 가장 큰 수를 출력하는 프로그램

    image.png

    • 내장 함수 사용

      1
      2
      3
      4
      5
      6
      7
      
        # A, B, C 사용자 입력
        A = int(input("A 입력: "))
        B = int(input("B 입력: "))
        C = int(input("C 입력: "))
              
        # A, B, C 중 가장 큰 수 출력
        max(A, B, C)
      
    • 직접 함수 만들어 사용

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      
        # A, B, C 사용자 입력
        A = int(input("A 입력: "))
        B = int(input("B 입력: "))
        C = int(input("C 입력: "))
              
        # A, B, C 중 가장 큰 수 출력
        if A > B: # 바깥쪽 if문 진입 -> True
            if A > C: # 안쪽 if문 블록 진입 -> 조건 판별
                print(A)
            else:
                print(C)
        else: # # 바깥쪽 if문 진입 -> Flase
            if B > C: # 여기서 판별
                print(B)
            else:
                print(C)
      

중첩 선택 구조의 구문 형식

  • 구문 형식

    image.png

중첩 선택 구조의 실행 흐름

image.png



연습 문제


  1. 파이썬에서 명령어의 논리적 집합인 명령 블록을 표현하기 위한 방법은?

    a. 들여 쓰기

  2. 다음은 온도(temp)가 0 이하일 경우 “겨울입니다.”를 출력하는 프로그램의 일부이다. 밑줄 친 빈 칸에 들어갈 명령문은?
    1
    2
    3
    4
    
     temp = int(input("온도를 입력하세요: "))
    
     # _____________
         print("겨울입니다.")
    

    a. if temp <= 0:

  3. 다음은 사용자가 입력한 수가 3과 5의 공배수일 경우 “3과 5의 공배수입니다”를, 아닐 경우 “3과 5의 공배수가 아닙니다.”를 출력하는 프로그램일 일부이다. 밑줄 친 빈칸에 들어갈 연산자는?
    1
    2
    3
    4
    5
    6
    
     guess = int(input("숫자를 입력하세요: "))
    
     if guess % 3 == 0 ______ guess% 5 == 0: # 빈칸
         print("3과 5의 공배수입니다.")
     else
         print("3과 5의 공배수가 아닙니다.")
    

    a. and



학습 정리


  • 선택 구조란 특정 영역 내의 명령문에 대한 실행 여부를 조건에 따라 판단하여 결정하는 구조임
  • 선택 구조의 실행 여부를 표현하는 조건은 참(True)과 거짓(False)으로 결정되는 불리언 식을 사용하며, 불리언 식은 비교 연산자를 사용하여 결과가 불리언 타입으로 생성되는 표현 식임
  • 불리언 타입은 논리 값인 참(True)과 거짓(False)의 값만 표현할 수 있는 데이터 타입임
  • 논리 연산자는 두 개의 논리 값(불리언 식)을 연산하여 참 또는 거짓을 결과로 얻는 연산자임
  • 단락 평가란 첫 번째 논리 값 만으로 전체 연산 결과가 판별 가능할 때 두 번째 논리 값은 확인(평가)하지 않는 기법임
  • if, elif, else 명령어를 사용하여 이분 또는 다분 선택 구조로 확장할 수 있음
  • 중첩 선택 구조는 한 선택 구조 내부에 또 다른 선택 구조를 내포하는 구조임

[파이썬 프로그래밍 기초] 5강 - 순차 구조

[파이썬 프로그래밍 기초] 7강 - 반복 구조