[Python] 나도코딩 기본편 - (7)

Updated:

유튜브 나도코딩 무료 강의를 통해 학습한 내용을 정리해서 올리고 있습니다.

실습과정에서 필요에 따라 일부 강의 내용의 누락 및 추가, 수정사항이 있습니다.

퀴즈의 경우, 유튜브 풀이와 상이할 수 있습니다.


except 함수

try:
    print("나누기 전용 계산기입니다.")
    nums = []
    nums.append(int(input("첫 번째 숫자를 입력하세요 : ")))
    nums.append(int(input("두 번째 숫자를 입력하세요 : ")))
    # nums.append(int(nums[0] / nums[1]))
    print("{0} / {1} = {2}".format(nums[0],nums[1], nums[2]))
except ValueError:
    print("에러! 잘못된 값을 입력하였습니다.")
except ZeroDivisionError as err:
    print(err)
# except:
#     print("알 수 없는 오류")
except Exception as err:
    print("알 수 없는 오류인 경우 출력")
    print(err)
나누기 전용 계산기입니다.
첫 번째 숫자를 입력하세요 : 1
두 번째 숫자를 입력하세요 : 2
알 수 없는 오류인 경우 출력
list index out of range
  • except는 예외 처리 함수로서 특정 오류가 발생 시 처리하는 기능으로 여기선 print()로 오류 메시지를 입력하였다.

  • nums에 숫자가 2개인데 3개를 출력하게 입력해서 Exception으로 예외 처리 되었다.

사용자 정의 에러

class BigNumberError(Exception):
    def __init__(self, msg):
        self.msg = msg
    def __str__(self):
        return self.msg

try:
    print("한 자리 숫자 나누기 전용 계산기")
    num1 = int(input("첫 번째 숫자 입력하시오 : "))
    num2 = int(input("두 번째 숫자 입력하시오 : "))
    if num1 >=10 or num2 >=10:
        raise BigNumberError("입력값 : {0}, {1}".format(num1,num2))
    print("{0} / {1} = {2}".format(num1, num2, int(num1/num2)))
except ValueError as a:
    print("잘못된 값 입력")
    print(a)
except BigNumberError as err:
    print("에러 발생 한자리만 입력하세요.")
    print(err)
finally:
    print("계산기를 이용해 주셔서 감사합니다.")
한 자리 숫자 나누기 전용 계산기
첫 번째 숫자 입력하시오 : 10
두 번째 숫자 입력하시오 : 2
에러 발생 한자리만 입력하세요.
입력값 : 10, 2
계산기를 이용해 주셔서 감사합니다.
  • raise로 의도적으로 에러를 발생 시킬 수 있다.

  • finally는 에러 발생 여부에 상관없이 무조건 실행된다.

Quiz 9

동네에 항상 대기 손님이 있는 맛있는 치킨집이 있습니다.

대기 손님의 치킨 요리 시간을 줄이고자 자동 주문 시스템을 제작하였습니다.

시스템 코드를 확인하고 적절한 예외처리 구문을 넣으시오.

  • 조건1: 1보다 작거나 숫자가 아닌 입력값은 ValueError로 처리

    출력메시지 : “잘못된 값을 입력하였습니다.”

  • 조건2: 주문 가능 최대 수는 10마리

    치킨 소진시 사용자 정의 에러 SoldOutError 발생 후 프로그램 종료

    출력메시지 : “재고가 소진되어 더 이상 주문을 받지 않습니다.”

[코드]

chicken = 10
waiting = 1 # 홀 안에는 현재 만석. 대기번호 1부터 시작
while(True):
    print("[남은 치킨 : {0}]". format(chicken))
    order = int(input("치킨 몇 마리 주문하시겠습니까?"))
    if order > chicken: # 남은 치킨보다 주문량이 많을 때
        print("재료가 부족합니다.")
    else:
        print("[대기번호 {0}] {1} 마리 주문이 완료되었습니다." \
              .format(waitingm order))
        waiting += 1
        chicken -= order
# 사용자 정의 에러
class SoldOutError(Exception):
    def __init__(self, msg):
        self.msg = msg
    
    def __str__(self):
        return self.msg

chicken = 10
waiting = 1

try:
    while(True):
        print("[남은 치킨 : {0}]". format(chicken))
        order = int(input("치킨 몇 마리 주문하시겠습니까?"))
        
        # 주문량이 1보다 작을 때
        if order < 1:
            raise ValueError
            
        # 남은 치킨보다 주문량이 많을 때
        if order > chicken:
            print("재료가 부족합니다.")
        else:
            print("[대기번호 {0}] {1} 마리 주문이 완료되었습니다." \
                  .format(waiting, order))
            waiting += 1
            chicken -= order
        
        # 치킨이 모두 팔렸을 때
        if chicken == 0:
            raise SoldOutError("재고가 소진되어 더 이상 주문을 받지 않습니다.")
except ValueError:
    print("잘못된 값을 입력하였습니다.")
except SoldOutError as err:
    print(err)
[남은 치킨 : 10]
치킨 몇 마리 주문하시겠습니까?1
[대기번호 1] 1 마리 주문이 완료되었습니다.
[남은 치킨 : 9]
치킨 몇 마리 주문하시겠습니까?5
[대기번호 2] 5 마리 주문이 완료되었습니다.
[남은 치킨 : 4]
치킨 몇 마리 주문하시겠습니까?4
[대기번호 3] 4 마리 주문이 완료되었습니다.
재고가 소진되어 더 이상 주문을 받지 않습니다.

Leave a comment