Lecture 강의

Undergraduates 학부 Graduates 대학원 Lecture 역학 Lecture 설계 Lecture IT(IoT, AI) Lecture SAP2000 Lecture 아바쿠스 Lecture 파이썬 Lecture 엑셀 VBA Lecture 마이다스 Lecture 이탭스

[Quiz 09] 2.8 예외(오류) 처리

작성자 : kim2kie

(2023-03-05)

조회수 : 1348

[참조]
.관련 동영상
https://youtu.be/LPmhUiZIubg

 

Q) 
동네에 항상 대기 손님이 있는 치킨집이 있다.
대기 손님의 치킨 요리시간을 줄이고자 자동 주문시스템을 제작하였다.
시스템 코딩을 확인하고 적절한 예외처리 구문을 삽입하라.

조건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 # 주문 수 만큼 남은 치킨 감소


.출력 결과
[남은 치킨 : 10]

치킨 몇 마리 주문하시겠습니까?5
[대기번호 1] 5 마리 주문이 완료되었습니다.
[남은 치킨 : 5]

치킨 몇 마리 주문하시겠습니까?3
[대기번호 2] 3 마리 주문이 완료되었습니다.
[남은 치킨 : 2]

치킨 몇 마리 주문하시겠습니까?4
재료가 부족합니다.
[남은 치킨 : 2]

치킨 몇 마리 주문하시겠습니까?2
[대기번호 3] 2 마리 주문이 완료되었습니다.
재고가 소진되어 더 이상 주문을 받지 않습니다.


 
A) 해설
try, except, raise, 오류 종류에 관해 2.8절 참조


C) 코드: "quiz-09.py"
class SoldOutError(Exception):
    pass

chicken = 10 # 남은 치킨
waiting = 1 # 대기자 번호

while(True):
    try:
        print("[남은 치킨 : {0}]".format(chicken))
        order = int(input("치킨 몇 마리 주문하시겠습니까?")) # 주문 치킨
        if order > chicken:
            print("재료가 부족합니다.")    
        elif order <= 0:  # 1보다 작거나 숫자가 아닌 입력값이 들어올 경우, 
            raise ValueError  # ValueError를 raise
        else:
            print("[대기번호 {0}] {1} 마리 주문이 완료되었습니다.".format(waiting, order))
            waiting += 1
            chicken -= order

        if chicken == 0: # 치킨 소진 시 
            raise SoldOutError # 사용자 정의 에러 SoldOutError를 raise
    except ValueError:
        print("잘못된 값을 입력하였습니다.")
    except SoldOutError:
        print("재고가 소진되어 더 이상 주문을 받지 않습니다.")
        break