我下面有一个基本的菜单程序。我在将商品的“价格”添加到最终的“订单”字典时遇到了麻烦,因此创建的“ 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()
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
继续成为列表似乎是完全合理的。