[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