
기존의 만들었던 CoffeeMachin.py 파일을 이용하여 알고리즘 변경
제한 사항(Constrain)
- 커피 자판기에 보유된 총 금액이 5000원이다.
- 커피 자판기에 보유된 총 커피 개수는 10개이다.
- 커피 한개의 개수는 300원이다.
속성과 메소드
1) 속성(Properties)
- total_amount : 자판기가 가지고 있는 총 커피 개수
- total_amount_price : 자판기가 가지고 있는 총 금액
- coffee_price : 커피 한개의 가격(EX: 300원)
- req_coffee_nums : 원하는 커피 개수
- remaining_price : 돌려줄 금액(거스름 돈)
2) 메소드(Method)
- requtest() method : 사용자로 부터 돈과 원하는 커피 개수를 입력 받는 동작
- get(넣은 돈, 커피 개수) method : 커피를 뽑는 동작
- info() method : 자판기에 남은 돈과 남아 있는 커피 개수 출력
- check_amount() method : 현채 자판기에 남은 돈과 남아 있는 커피 개수 점검
3) 동작 정의
- 사용자에게 입력을 받는다.(넣은 돈, 커피 개수)
- 돈을 충분히 넣은 경우(EX: 700원, 2개 요청)
* 거스름 돈이 있는 경우(EX: 700원, 2개 요청)
* 자판기 커피 보유 총 개수에서 줄임
* 자판기 총 금액에서 줄이고, 거스름 돈을 돌려줌
* 거스름 돈이 없는 경우(EX: 600원, 2개 요청)
* 자판기 커피 보유 총 개수에서 줄임
* 돈을 반정도 넣은 경우(EX: 500원, 2개 요청)
* 거스름 돈이 있는 경우(EX: 500원, 2개 요청)
* 자판기 커피 보유 총 개수에서 줄임
* 자판기 총 금액에서 줄이고, 거스름 돈을 돌려줌
* 거스름 돈이 없는 경우(EX: 300원, 2개 요청)
* 자판기 커피 보유 총 개수에서 줄임
* 돈을 불충분하게 넣은 경우(200원, 2개 요청)
* 사용자가 입력한 전체가 거스름돈이 됨
coffee = 10 # 자판기의 커피 개수
total_money = 5000
print('커피가', coffee, '잔 남았습니다.')
print('커피 한 잔의 가격은 300원입니다.')
while True:
if not coffee: # 커피가 없으면
print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
break
if total_money <= 0:
print("잔돈이 없습니다. 다음에 이용해주세요.")
break
cups = int(input('커피 몇 잔 드릴까요?: '))
if cups > coffee:
print('커피가', coffee, '잔 남았습니다. 개수를 다시 지정해주세요.')
continue
money = int(input("돈을 넣어 주세요: "))
if 300 < money < 300 * cups:
print(cups, '잔 구매할 경우', -(money - 300 * cups), '원이 부족합니다.')
print("그래서 %d잔 드리겠습니다." % (money // 300))
print('거스름돈은', -(money - 300 * cups), '원입니다.')
coffee -= (money // 300)
print("남은 커피의 양은 %d개 입니다." % coffee)
print("남은 돈은 %d 입니다." % total_money)
continue
if money <= total_money:
if money >= 300:
print("커피를 %d잔 줍니다." % cups)
coffee -= cups
if money - 300 * cups != 0:
print('거스름돈은', money - 300 * cups, '원입니다.')
total_money -= money - 300 * cups
elif money < 300:
print(cups, '잔 구매할 경우', -(money - 300 * cups), '원이 부족합니다.')
print("다시 거스름돈 %d 원을 반환해드리겠습니다. " % money)
print("남은 커피의 양은 %d개 입니다." % coffee)
print("남은 돈은 %d 입니다." % total_money)
else:
print("거스름 돈이 부족하여 판매할 수 없습니다.")
import sys
class CoffeeMachine:
total_amount = 10 # 자판기가 가지고 있는 총 커피 개수
total_amount_price = 5000 # 자판기가 가지고 있는 총 금액
coffee_price = 300 # 커피 한개의 가격(EX: 300원)
put_price = 0 # 원하는 커피 개수
req_coffee_nums = 0 # 주문한 커피 개수
remaining_price = 0 # 돌려줄 금액(거스름 돈)
def request(self):
# * 사용자로 부터 돈과 원하는 커피 개수를 입력 받는 동작
self.req_coffee_nums = cups = int(input('커피 몇 잔 드릴까요?: '))
self.put_price = int(input("돈을 넣어 주세요: "))
def check_amount(self):
# * 현재 자판기에 남은 돈과 남아 있는 커피 개수 점검
if self.total_amount <= 0:
return False
elif self.total_amount_price <= 0:
return False
else:
return True
def check_amount_print(self, num, remain):
if self.total_amount <= 0:
print('[ FAIL ] 커피 자판기에 커피 개수가 부족하거나 또는 보유 금액이 부족합니다.')
sys.exit(2)
elif self.total_amount_price <= 0:
print("잔돈이 없습니다. 다음에 이용해주세요")
sys.exit(2)
else:
print('[ OK ] 커피 %d 개를 드립니다.' % num)
print('[ OK ] 거스름돈 %d 만큼 드립니다.' % remain)
def info(self):
# * 자판기에 남은 돈과 남아 있는 커피 개수 출력
print("+--------------------------------------------")
print("| 총 금액:", self.total_amount_price)
print("| 총 개수:", self.total_amount)
print("| 커피 가격:", self.coffee_price)
print("+--------------------------------------------")
def get(self):
# * 커피를 뽑는 동작
# * 1) 돈을 반정도 넣은 경우(EX: 500원, 2개 요청)
# * 2) 돈을 충분히 넣은 경우(EX: 700원, 2개 요청)
# * 3) 돈을 불충분하게 넣은 경우(200원, 2개 요청)
price = self.req_coffee_nums * self.coffee_price # 변수 만들기
short_price = -(self.put_price - self.coffee_price * self.req_coffee_nums) # 변수 만들기
# * 1) 돈을 반정도 넣은 경우(EX: 500원, 2개 요청)
if self.coffee_price < self.put_price < self.req_coffee_nums * self.coffee_price:
print(self.req_coffee_nums, '잔 구매할 경우', short_price, '원이 부족합니다.')
print("그래서 %d잔 드리겠습니다." % (self.put_price // self.coffee_price))
print('거스름돈은 ', short_price, '원입니다.')
self.total_amount -= (self.put_price // self.coffee_price)
print("남은 커피의 양은 %d개 입니다." % self.total_amount)
print("남은 돈은 %d 입니다. " % self.total_amount_price)
return True
# * 2) 돈을 충분히 넣은 경우(EX: 700원, 2개 요청)
if self.put_price <= self.total_amount_price:
if self.put_price >= self.coffee_price:
print("커피를 %d잔 줍니다." % self.req_coffee_nums)
self.total_amount -= self.req_coffee_nums
if self.put_price - self.coffee_price * self.req_coffee_nums != 0:
print('거스름돈은 ', self.put_price - self.coffee_price * self.req_coffee_nums, '원입니다.')
self.total_amount_price -= self.put_price - self.coffee_price * self.req_coffee_nums
# * 3) 돈을 불충분하게 넣은 경우(200원, 2개 요청)
elif self.put_price < self.coffee_price:
print(self.req_coffee_nums, '잔 구매할 경우', short_price, '원이 부족합니다.')
print("다시 거스름돈 %d 원을 반환해드리겠습니다. " % self.put_price)
print("남은 커피의 양은 %d개 입니다." % self.total_amount)
print("남은 돈은 %d 입니다. " % self.total_amount_price)
else:
print("거스름 돈이 부족하여 판매할 수 없습니다.")
def main():
c = CoffeeMachine()
while True:
# 1) 입력(커피 개수, 돈 입력)
c.info()
c.request()
# 2) 커피 자판기가 계산
if c.check_amount():
c.get()
else:
print('[ FAIL ] 커피 자판기에 커피 개수가 부족하거나 또는 보유 금액이 부족합니다.')
sys.exit(1)
# 3) 출력(커피 개수, 거스름돈)
c.info()
input('Press any key ....')
if __name__ == '__main__':
main()



