我下面有一个基本的菜单程序。我在将商品的“价格”添加到最终的“订单”字典时遇到了麻烦,因此创建的“ txt”文件会适当地显示商品和价格。 在代码中,您可以看到“ orders”目前不是字典,而是一个“列表”(这是我目前可以使用的唯一方法。此外,我还有一个硬编码的“价格为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()
答案 0 :(得分:0)
这里有几件事要做。
首先,在此代码中:
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
继续成为列表似乎很合理。