스터디/파이썬 스터디 강의자료

[3팀/김경은] 3차시 파이썬 스터디 - 조건문

경은 2023. 3. 22. 23:11

데이터 과학을 위한 파이썬 프로그래밍 교재를 사용하여 작성한 강의자료입니다.

3차시_조건문_강의안.pdf
0.50MB
3차시_조건문_과제.pdf
0.84MB

 

제어구조

프로그램의 처리 흐름을 제어하는 방법

  • 순차형 (sequence) : 명령어들이 순차적으로 실행되는 구조
  • 선택형 (selection) : 두 개중에서 하나의 명령어를 선택하여 실행하는 구조
  • 반복형 (iteration) : 동일한 명령이 반복되면서 실행되는 구조

💡 선택 가능한 모든 대안을 확인하고 대안을 선택하는 판단 기준이 무엇인지 확인것이 중요

 

조건

어떤 판단 기준을 예/아니오로 대답할 수 있는 질문 형태로 표현한 것

  • ‘날씨가 흐린가?’ (조건식)
  • → 예 (조건식의 결과) → 우산을 가져간다. (선택 가능한 대안)
  • → 아니오 (조건식의 결과) → 우산을 가져가지 않는다. (선택 가능한 대안)

조건문

조건에 따라 특정 동작을 하도록 하는 프로그래밍 명령어

  • 사용자가 20세 이하면 VOD를 재생하지 마라
  • 스마트폰 잠금 해제 패턴이 5회 틀리면 20초 동안 대기 상태로 만들어라

조건문을 구성하기 위해 조건을 나타내는 기준과 실행해야 할 명령이 필요하다.

조건의 기준 : ‘스마트폰 잠금 해제 패턴이 5회 틀리면’

실행해야 할 명령어 : ‘20초 동안 대기 상태’

조건문은 반드시 참과 거짓으로 구분

 

if 조건식

조건식이 참이면 문장을 실행하라는 제어구조

나이가 20세 이상이면 투표를 할 수 있습니다

-> 조건                         -> 동작

>>> age = 25
>>> if age >= 20:
        print("투표를 할 수 있습니다.")

투표를 할 수 있습니다.

if 문 사용 주의사항

 

  1. if 뒤에는 참과 거짓을 판단할 수 있는 조건문이 와야 함
  2. 조건문이 끝나면 반드시 콜론(:)을 붙여야 함
  3. 들여쓰기를 통해 블럭을 구분, 공백 4개나 Tab 키 사용

들여쓰기 개수를 틀려서 실행이 안됨

>>> score = int(input("성적을 입력하시오 : "))
성적을 입력하시오 : 60
>>> if score >= 90:
        print("합격")
            print("장학금 받을 수 있어요")

SyntaxError: unexpected indent

블록이 서로 다른 경우, 들여쓰기 개수를 틀려도 동작은 하지만 권장 하지 않음

>>> if score >= 90:
        print("합격")
else:
    print("불합격")

불합격

if-else 문

조건식이 참이면 문장 1을 실행, 거짓이면 문장 2를 실행하라는 제어구조

  • if 조건이 거짓일 경우 else 문이 실행
  • else 문은 생략해도 상관없지만 조건에 해당하지 않는 경우 처리해야 할 명령이 있다면 else 문을 작성하여 else 문을 작성할 수 있음
>>> if score >= 80:
        print("합격입니다.")                       #조건식의 결과가 True인 경우
>>> else:                          
        print("아쉽습니다. 다시 도전해 주세요.")   #조건식의 결과가 False인 경우

 

조건의 판단

조건문 코드의 판단 방법은 참 또는 거짓을 구분하는 방법과 같음

  • 비교 연산자

비교연산자 비교 상태 설명

x < y ~보다 작음 x가 y보다 작은지 검사
x > y ~보다 큼 x가 y보다 큰지 검사
x == y 같음 x와 y의 값이 같은지 검사
x is y 같음(메모리 주소) x와 y의 메모리 주소가 같은지 검사
x ! = y 같지 않음 x와 y의 값이 같지 않은지 검사
x is not y 같지 않음(메모리 주소) x와 y의 메모리 주소가 같지 않은지 검사
x > = y 크거나 같음 x가 y보다 크거나 같은지 검사
x < = y 작거나 같음 x가 y보다 작거나 같은지 검사

== 연산자

== : 같음을 의미

= : 할당의 의미

>>> 7 == 7

is

>>> a = 100
>>> b = 100
>>> a is b
True
>>> a == b
True
>>> a = 300
>>> b = 300
>>> a == b
True
>>> a is b
False

True 와 False 의 치환

True : 1

False : 0

>>> if 1: print("True")
... else: print("False")

존재하면 True , 존재하지 않으면 False

>>> (3>5) < 10

논리 연산자

연산자 의미 설명 사용 예

and(논리곱) ~이고, 그리고 둘 다 참이어야 참 (a>100) and (a<200), A & B
or(논리합) ~이거나, 또는 둘 중 하나만 참이어도 참 (a==100) or (a==200), A
not(논리부정) ~아니다, 부정 참이면 거짓, 거짓이면 참 not(a<100)
>>> a = 99
>>> (a>100) and (a<200)
False
>>> (a>100) or (a<200)
True
>>> not(a==100)
True
  • 논리연산자가 없다면 …?
# 논리 연산자를 사용한 경우

>>> a = 99
>>> (a>100) and (a<200)
False
# 논리연산자 없이 비교연산자만 사용한 경우

>>> a = 99
>>> if  a<200:
       if a>100:
           print("True")
       else:
           print("False")
False   

if-else 문을 사용하여 코드가 훨씬 길어지게 되고 가독성이 떨어진다.

 

if-elif-else 문

점수(score) 학점(grade)

98  
37  
16  
86  
71  
63  
  • 코드가 한 줄씩 차례대로 실행되어 어떤 값을 입력하더라도 ‘D’나 ‘F’로 나온다.
  • grade 변수에 계속 변경되어 할당
score = int(input("Enter your score"))

if score > = 90:
    grade ='A'
if score > = 80
    grade = 'B'
if score > = 70:
    grade ='C'
if score > = 60
    grade = 'D'
if score < 60:
    grade ='F'

print(grade, "학점입니다.")
Enter your score:98
D 학점입니다.

if-elif-else

elif : else if 의 줄임말로 if 문과 같은 방법으로 조건문을 표현할 수 있음

score = int(input("Enter your score"))

if score > = 90:
    grade ='A'                          # 90 이상일 경우 A
elif score > = 80
    grade = 'B'                         # 80 이상일 경우 B                               
elif score > = 70:
    grade ='C'                          # 70 이상일 경우 C
elif score > = 60
    grade = 'D'                         # 60 이상일 경우 D
else score < 60:
    grade ='F'                          # 모든 조건에 만족하지 못할 경우 F

print(grade, "학점입니다.")

논리 연산자 없이 비교연산자를 사용한 경우

>>> 1 <= 2 < 10
True
>>> 1 <= 100 < 10
False

 

중첩 if 문

>>> age = 11
>>> height = 160
>>> if age >= 10:           #참
        if height >= 150:   #참
            print("놀이기구를 탈 수 있습니다.")
        else:
            print("놀이기구를 탈 수 없습니다.")
>>> else:
        print("놀이기구를 탈 수 없습니다.")

놀이기구를 탈 수 있습니다.
  • age 와 height이 첫번째 if문인 age≥ 10 조건과 두번째 if문인 height ≥ 150 조건을 모두 만족하여print(”놀이기구를 탈 수 있습니다.”) 가 실행된다.
>>> height = 140
>>> if age >= 10:           
        if height >= 150:   #거짓
            print("놀이기구를 탈 수 있습니다.")
        else:
            print("놀이기구를 탈 수 없습니다.")
>>> else:
        print("놀이기구를 탈 수 없습니다.")

놀이기구를 탈 수 없습니다.
  • height 변수가 140으로 다시 할당되고 age 변수는 11 그대로 이다. 이때 age >= 10 조건은 만족하나 height ≥ 150 조건을 만족하지 못하여 두번째 if문의 else문이 실행되어 print(”놀이기구를 탈 수 없습니다.”) 가 실행된다.
>>> age = 9
>>> if age >= 10:           #거짓
        if height >= 150:   
            print("놀이기구를 탈 수 있습니다.")
        else:
            print("놀이기구를 탈 수 없습니다.")
>>> else:
        print("놀이기구를 탈 수 없습니다.")

놀이기구를 탈 수 없습니다.
  • age 변수가 9로 다시 할당되었고 height 변수는 위에서 140 이었으므로 age >= 10 조건과 height >= 150 조건을 둘 다 만족하지 못하여 else문인 print(”놀이기구를 탈 수 없습니다.”) 를 실행한다.

실습

연산자와 if-else 를 이용한 실습문제

🎢 놀이공원의 어린이용 놀이기구는 키는 155cm 이하, 몸무게는 50kg 이하의 제한 조건이 있다고 했을때 a의 키는 165cm, 몸무게 60kg 이라면 어린이용 놀이기구를 탈 수 있는지 확인하는 프로그램

  • 정답 
    1. a의 키와 몸무게를 입력받기 위해서 height 변수와 weight 변수를 만들어 input으로 사용자에게 입력받는다.
    2. if 문을 사용해서 조건을 확인한 뒤 탑승 가능과 불가능을 판단한다.
    3. height <= 155 조건과 weight <= 50 조건을 동시에 만족해야 하므로 and 연산자를 이용해 조건식을 작성해 준다.
    4. 조건을 모두 만족하면 “탑승 가능”을 출력하고 하나의 조건이라도 만족하지 못한다면 “탑승 불가능” 문장을 출력하도록 한다.
height = int(input("키: "))
weight = int(input("몸무게: "))
if height <= 155 and weight <= 50:
    print("탑승 가능")
else:
    print("탑승 불가능")

if-elif-else 실습 예제

물건을 주문할때의 최저 구매금액이 조건으로 붙는 경우

  • 최저 구매금액이 2만원
  • 2만원 이상 5만원 미만이면 구매금액에 배송비 2500원 추가
  • 5만원 이상이면 무료배송 제공
  • 구매 금액을 입력받아 금액이 2만원 미만이면 ‘주문금액이 부족합니다’를 출력
  • 실제 결제 금액을 알려 주고 프로그램을 종료
  • 정답
    1. 사용자에게 주문금액을 입력받을 수 있도록 input 함수를 사용하고 정수형으로 전환하여 금액을 비교할 수 있도록 한다.
    2. 주어진 조건에 맞게 2만원 미만의 금액은 주문금액이 부족하다는 문장을 출력하고 5만원 이하는 배송비 2500원이 추가된다는 문장과 함께 사용자가 입력한 구매금액에 2500을 더하여 다시 할당해 준다.
    3. 이외의 조건은 자동으로 주문금액이 5만원 이상인 경우 이므로 else 문을 사용해 무료배송의 조건을 만족해 무료배송 된다는 문장을 출력할 수 있도록 한다.
    4. 마지막으로 print문을 이용하여 최종금액 price 를 출력한다
price = int(input("구매 금액은 ?: "))
if price < 20000:
    print("주문 금액이 부족합니다")
elif price < 50000:
    print("배송비 2500원이 추가됩니다.")
    price += 2500
else:
    print("무료배송됩니다.")

print("최종금액은", price, "원입니다.")

어떤 종류의 학생인지 맞히기

사용자가 태어난 연도를 입력하면 어떤 종류의 학생인지 맞히는 프로그램

  • 나이는 (2023-태어난연도+1)로 계산
  • 26세 이하 20세 이상이면 ‘대학생’
  • 20세 미만 17세 이상이면 ‘고등학생’
  • 17세 미만 14세 이상이면 ‘중학생’
  • 14세 미만 8세 이상이면 ‘초등학생’
  • 그 외의 경우는 ‘학생이 아닙니다.’ 출력
  • 실행 결과
당신이 태어난 연도를 입력하세요.   #입력대기
1982                              #자신이 태어난 연도 입력
학생이 아닙니다.                  #어떤 종류의 학생인지 출력

정답

print("당신이 태어난 연도를 입력하세요")
birth_year = input()
age = 2023-int(birth_year)+1

if age <= 26 and age >= 20:
    print("대학생")
elif age < 20 and age >= 17:
    print("고등학생")
elif age < 17 and age >= 14:
    print("중학생")
elif age < 14 and age >= 8:
    print("초등학생")
else:
    print("학생이 아닙니다.")
  1. print 문을 이용하여 사용자에게 태어난 연도를 입력할것을 안내한다.
  2. birth_year 변수를 이용하여 태어난 연도를 할당받고 age 변수를 이용하여 사용자의 나이를 계산하는 식을 작성한다.
  3. if-elif-else 문을 사용해서 age 변수가 속하는 특정나이에 해당하는 학생을 출력한다.

 

if-elif-else 조건식과 중첩 if 문 실습

나이를 입력 받아 20살이 넘으면 “당신은 성인입니다.”를 출력하고, 10살 이상 20살 미만은 “당신은 청소년입니다”를 출력하고, 10살 미만은 “당신은 어린이 입니다”를 출력하는 프로그램을 if-elif-else 조건식과 중첩 if문으로 작성해보기

>>> age = int(input("나이 : "))

>>> if age >= 20:
        print("당신은 성인입니다.")
>>> elif age >= 10:
        print("당신은 청소년입니다.")
>>> else:
        print("당신은 어린이입니다.")
  1. age 변수를 통해 사용자에게 input함수를 사용하여 나이를 입력 받고 숫자의 비교를 위해 정수형으로 변환하여 준다.
  2. if - elif - else 문을 사용하여 사용자의 나이가 20세 이상이면 “당신은 성인입니다.” 문장을 출력하고 10세 이상인 경우는 “당신은 청소년 입니다.”를 출력한다. 두 조건을 다 만족하지 않으면 자동으로 10세 이하의 나이이므로 “당신은 어린이 입니다.”를 출력한다.
>>> age = int(input("나이 : "))

>>> if age >= 20:
       print("당신은 성인입니다.")
>>> else:
>>>    if age >= 10:
          print("당신은 청소년입니다.")
       else:
          print("당신은 어린이입니다.")
  1. age 변수를 통해 사용자에게 input함수를 사용하여 나이를 입력 받고 숫자의 비교를 위해 정수형으로 변환하여 준다.
  2. if 문을 사용하여 20세 이상인지를 판단하고 참이면 “당신은 성인입니다.”를 출력하고 거짓이면 else 문을 실행한다.
  3. 이때 else 문은 중첩 if문으로 나이가 10세 이상 조건이 참이면 “당신은 청소년입니다.”를 출력하고 거짓이면 else문의 “당신은 어린이입니다.”를 출력한다.