logo
Search검색어를 포함하는 게시물들이 최신순으로 표시됩니다.
    Table of Contents
    [Python] Quiz 10

    이미지 보기

    [Python] Quiz 10

    • 21.07.19 작성

    • 읽는 데 4

    TOC

    Quiz 10

    문제

    Quiz) 동네에 항상 대기 손님이 있는 맛있는 치킨집이 있습니다.
    대기 손님의 치킨 요리 시간을 줄이고자 자동 주문 시스템을 제작하였습니다.
    시스템 코드를 확인하고 적절한 예외처리 구문을 넣으시오.
    
    조건 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(waiting, order))
    waiting += 1
    chicken -= order
    

    나의 작성 코드

    class SoldOutError:
        def __init__(self, msg):
            self.msg = msg
    
        def __str__(self):
            return  self.msg
    
    try:
        chicken = 10
        waiting = 1
        while(True):
            if chicken == 0:
                raise SoldOutError
    
            print("[남은 치킨 : {0}]".format(chicken))
            order = int(input("치킨 몇 마리 주문하시겠습니까?"))
            if order > chicken:
                print("재료가 부족합니다.")
            elif order < 1:
                raise ValueError
    
            else:
                print("[대기번호 {0}] {1} 마리 주문이 완료되었습니다." \
                      .format(waiting, order))
                waiting += 1
                chicken -= order
    
    except ValueError:
        print("잘못된 값을 입력하였습니다.")
    
    except SoldOutError as err:
        print("재고가 소진되어 더 이상 주문을 받지 않습니다.")
    

    모범 답안

    class SoldOutError(Exception):
        pass
    
    chicken = 10
    waiting = 1  # 홀 안에는 현재 만석. 대기번호 1부터 시작
    while(True):
        try:
            print("[남은 치킨 : {0}]".format(chicken))
            order = int(input("치킨 몇 마리 주문하시겠습니까?"))
            if order > chicken:  # 남은 치킨보다 주문량이 많을 때
                print("재료가 부족합니다.")
            elif order <= 0:
                raise ValueError
            else:
                print("[대기번호 {0}] {1} 마리 주문이 완료되었습니다." \
                      .format(waiting, order))
                waiting += 1
                chicken -= order
    
            if chicken == 0:
                raise SoldOutError
    
        except ValueError:
            print("잘못된 값을 입력하였습니다.")
    
        except SoldOutError:
            print("재고가 소진되어 더 이상 주문을 받지 않습니다.")
            break
    

    Reference

    profile

    FE Developer 박승훈

    노력하는 자는 즐기는 자를 이길 수 없다