У меня есть основная программа меню ниже. У меня возникают проблемы с добавлением 'цены' товара в окончательный словарь "заказов", чтобы созданный файл "txt" отображал товар и цену соответствующим образом. В коде вы можете видеть, что «заказы» на данный момент не словарь, а «список» (это единственный способ, которым я могу заставить его работать в данный момент. Кроме того, я жестко запрограммирован) 3.00 "за цену вместо действительной стоимости предмета, который выбирает человек (я знаю, что мне нужно заменить это" 3.00 "на что-то другое). Заранее спасибо за вашу помощь ...
def print_menu(menu):
for name, price in menu.items():
print(name, ': $', format(price, '.2f'), sep='')
def get_order(menu):
orders = []
order = input("What would you like to order? (Q to Quit)")
while order.upper() != 'Q':
found_boolean = menu.get(order)
if found_boolean:
orders.append(order)
else:
print("Menu item does not exist")
order = input("Anything else? (Q to Quit)")
return orders
def total_bill(orders, menu):
total = 0
for order in orders:
total += menu[order]
return total
def write_sales_log(orders, total):
sales_log = open('sales.txt', 'a')
for item in orders:
sales_log.write(item + ' ' + format(price, ' .2f') + '\n')
sales_log.write('total = ' + format(total, '.2f') + '\n\n')
sales_log.close()
def main():
menu = {'Roast Beef': 2.5, 'Hot Dog': 3.0, 'Hamburger': 3.5}
print_menu(menu)
orders = get_order(menu)
total = total_bill(orders, menu)
print("You ordered:", orders,
"Your total is: $", format(total, ' .2f'), sep='')
write_sales_log(orders, total)
main()
1 ответ
Вот несколько вещей для работы.
Во-первых, в этом коде:
found_boolean = menu.get(order)
if found_boolean:
orders.append(order)
похоже, вы неправильно понимаете, что делает функция get
. Он ищет ключ в словаре и возвращает соответствующее значение. Не возвращает логическое значение. Если вы просто хотите увидеть, является ли order
одним из ключей в словаре menu
, попробуйте следующее:
if order in menu:
orders.append(order)
Во-вторых, посмотрите, как в функции total_bill
вы правильно написали menu[order]
, чтобы найти order
в словаре menu
и получить обратно соответствующее значение (цену)? Используйте тот же синтаксис, чтобы получить цену для каждого элемента в функции write_sales_log
. Так, например:
for item in orders:
price = menu[item]
sales_log.write(.......
В-третьих, в функции get_order
вы запрашиваете у пользователя только другой заказ, если его первый заказ был недействительным. Если они дают вам правильный заказ, то ваш код заходит в бесконечный цикл и застревает. Вы, вероятно, хотите переместить строку order = input("Anything else? (Q to Quit)")
за пределы блока else
.
В-четвертых, вы написали, что хотите, чтобы orders
был словарем. Как вы указали, в настоящее время эта переменная содержит список. Почему вы предпочитаете, чтобы в нем был словарь? Если бы вы предпочли использовать словарь, то как бы этот словарь был структурирован? Словарь связывает ключи со значениями (например, ваш словарь menu
, который связывает продукты питания с их ценами). Какими будут ключи и значения словаря orders
? На самом деле, orders
выглядит вполне разумным, чтобы оставаться списком.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.