'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