반응형
이전에 작성했던 커피 머신을 OOP, 즉 Class // Attributes Methods를 이용하여 코드를 작성했다.
로직은 이전과 동일하다.
로직
- 마시고자하는 커피의 종류를 고른다
- 커피의 종류를 고를 때 'report'를 입력하면 현재 남아있는 재료를 출력해준다
- 남아있는 재료가 충분하지 않다면 충분하지 않음을 알려준다
- 커피를 고르고 동전을 넣는다.
- 동전을 제조 비용보다 많이 넣을 시 (총 동전 - 제조 비용) 을 반환 해준다
- 동전이 부족할 경우 만들어 주지 못한다고 출력한다.
- 재료와 동전이 충족될 시 커피를 만들어 주고 거스름 돈이 있을 시 거스름 돈을 거슬러준다
코드
from menu import Menu, MenuItem
from coffee_maker import CoffeeMaker
from money_machine import MoneyMachine
초기 코드는 이렇게 다른 모듈들을 불러오는 코드로 구성 되어있다.
여기서 로직을 생각해 코딩을 작성 하라고 했으니 발전 시켜나가본다.
## OOP를 이용한 커피 머신 만들기
## 로직
# 필요한 것
# 1. 보고서를 출력할 수 있어야 한다.
# -> 어떤 재료가 얼마나 남았는 지 , 물은 얼마나 있고, 우유는 얼마나 남았는 지를 알 수 있어야 한다.
# -> input에 report 를 입력하면 Water, Milk, Coffee, Money 를 출력하고 인풋 다시 받기 # espresso/latte/cappuccino
# 2. 사용자가 커피를 주문할 때 재료가 충분한지 확인하는 기능도 필요하다.
# -> 사용자가 라떼를 주문했다고 가정했을 때 동전을 넣으면 거스름돈이 나오고 라떼도 나온다. 보고서를 확인하면 물이 100ml 밖에 없는 것 확인 가능
# -> 이런 경우에서 물이 필요한데 채워 넣지 않고 주문을 하면 죄송합니다 문구 출력
# 3. 동전을 처리할 수 있어야 한다.
# -> 동전을 종류별로 넣어서 커피의 가격보다 낮은 가격의 동전을 넣게 되면 커피는 나오지 않고 동전은 반환 된다.
# -> 커피의 가격보다 높은 가격의 동전을 넣게 되면 커피 가격을 기준으로 거스름돈을 주게 된다.
from menu import Menu, MenuItem
from coffee_maker import CoffeeMaker
from money_machine import MoneyMachine
my_menu = Menu()
my_coffee_maker = CoffeeMaker()
my_money_machine = MoneyMachine()
while True :
user_input = input(f"What would you like? ({my_menu.get_items()}): ")
if user_input == 'report':
my_coffee_maker.report()
my_money_machine.report()
else:
drink = my_menu.find_drink(user_input)
if my_coffee_maker.is_resource_sufficient(drink=drink):
if my_money_machine.make_payment(drink.cost) :
my_coffee_maker.make_coffee(drink)
상단에 이전에 해왔던 것 처럼 로직을 정리하고 로직을 작성했다.
일단 각 객체들을 선언하고 인풋 값을 받아서 인풋 값에 따른 조건문을 할당하고 커피를 만들수 있는지 여부를 체크 후에 커피를 만들 돈이 충분한지 체크 후 커피를 만들어 제공해준다.
각 모듈들은 Github 에 있다.
3줄요약
각 모듈들을 정확히 읽은 뒤 어떤 파라미터를 사용해야 하는 지 메소드를 이해하는 데 중점이 있어 보인다.
객체 지향이란 이런 것이구나를 사용하면서 익힌 것 같다. 직접 객체를 생성 해봐야 좀 더 명확하게 다가오지 않을 까 하는 생각이 든다.
아 한가지 궁금한 것은 drink.cost 가 코드 상에서 "cost" is not a known member of "None"PylancereportOptionalMemberAccess 에러가 발생하는 데 불구하고 정상적으로 실행되는 게 궁금하다.
반응형
'프로그래밍 > Python' 카테고리의 다른 글
Python 부트 캠프 - turtle 모듈을 이용한 소과제 해결하기 (0) | 2023.05.24 |
---|---|
Python 부트 캠프 - OOP를 이용한 퀴즈 생성기 (0) | 2023.05.23 |
Python 부트 캠프 - 커피 머신 생성 (2) | 2023.05.19 |
Python 부트 캠프 - 계산기 만들기 (0) | 2023.04.30 |
Python 부트 캠프 - 경매 게임 만들기 (0) | 2023.04.26 |