'why does my program execute an extra line("none") when executed?
I recently wrote a program using oop for an online coffee machine:
from menu import Menu from coffee_maker import CoffeeMaker from money_machine import MoneyMachine
menu = Menu() coffee_maker = CoffeeMaker() money_machine = MoneyMachine()
is_on = True
while is_on: choice = input(f"What would you like? {menu.get_items()}") if choice == "off": is_on = False elif choice == "report": print(coffee_maker.report()) print(money_machine.report())
files:
class CoffeeMaker: """Models the machine that makes the coffee""" def init(self): self.resources = { "water": 300, "milk": 200, "coffee": 100, }
def report(self): """Prints a report of all resources.""" print(f"Water: {self.resources['water']}ml") print(f"Milk: {self.resources['milk']}ml") print(f"Coffee: {self.resources['coffee']}g") def is_resource_sufficient(self, drink): """Returns True when order can be made, False if ingredients are insufficient.""" can_make = True for item in drink.ingredients: if drink.ingredients[item] > self.resources[item]: print(f"Sorry there is not enough {item}.") can_make = False return can_make
def make_coffee(self, order): """Deducts the required ingredients from the resources.""" for item in order.ingredients: self.resources[item] -= order.ingredients[item] print(f"Here is your {order.name} ☕️. Enjoy!")
class MenuItem: """Models each Menu Item.""" def init(self, name, water, milk, coffee, cost): self.name = name self.cost = cost self.ingredients = { "water": water, "milk": milk, "coffee": coffee }
class Menu: """Models the Menu with drinks.""" def init(self): self.menu = [ MenuItem(name="latte", water=200, milk=150, coffee=24, cost=2.5), MenuItem(name="espresso", water=50, milk=0, coffee=18, cost=1.5), MenuItem(name="cappuccino", water=250, milk=50, coffee=24, cost=3), ]
def get_items(self): """Returns all the names of the available menu items""" options = "" for item in self.menu: options += f"{item.name}/" return options def find_drink(self, order_name): """Searches the menu for a particular drink by name. Returns that item if it exists, otherwise returns None""" for item in self.menu: if item.name == order_name: return item print("Sorry that item is not available.")
class MoneyMachine:
CURRENCY = "$" COIN_VALUES = { "quarters": 0.25, "dimes": 0.10, "nickles": 0.05, "pennies": 0.01 } def __init__(self): self.profit = 0 self.money_received = 0 def report(self): """Prints the current profit""" print(f"Money: {self.CURRENCY}{self.profit}") def process_coins(self): """Returns the total calculated from coins inserted.""" print("Please insert coins.") for coin in self.COIN_VALUES: self.money_received += int(input(f"How many {coin}?: ")) * self.COIN_VALUES[coin] return self.money_received def make_payment(self, cost): """Returns True when payment is accepted, or False if insufficient.""" self.process_coins() if self.money_received >= cost: change = round(self.money_received - cost, 2) print(f"Here is {self.CURRENCY}{change} in change.") self.profit += cost self.money_received = 0 return True else: print("Sorry that's not enough money. Money refunded.") self.money_received = 0 return False
but it printed:
What would you like? latte/espresso/cappuccino/report Water: 300ml Milk: 200ml Coffee: 100g None Money: $0 None What would you like? latte/espresso/cappuccino/
can you tell me how to remove this "none"?
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|