Python多商品下单程序优化:用Ctrl+D替代最后一次回车
Python下单程序输入逻辑优化
我正在开发一款Python下单程序,功能要求如下:
- 允许用户每行输入一个商品,直至按下Ctrl+D结束输入
- 输入不区分大小写,忽略预定义菜单外的无效项
- 最终输出带$前缀、保留两位小数的总价
现有简化代码如下:
food_menu = { "Baja Taco": 4.00, "Burrito": 7.50, "Bowl": 8.50, "Nachos": 11.00, "Quesadilla": 8.50, "Super Burrito": 8.50, "Super Quesadilla": 9.50, "Taco": 3.00, "Tortilla Salad": 8.00 } cost = [] while True: try: item = input("Item: ").title() if item in food_menu: cost.append(food_menu[item]) else: continue except EOFError: print() break total = sum(cost) print("Total: $", f"{total:.2f}", sep="")
当前问题:若输入多个商品(如2个Taco、1个Quesadilla),需在每次输入后按回车,再在第4次提示时按Ctrl+D才能得到总价。希望优化为输入3个商品仅需2次回车,最后一次用Ctrl+D结束输入,请问如何修改代码?
修改方案
核心问题是原代码每次循环调用input()会重复弹出"Item: "提示,导致用户必须在最后一次输入后回车,再按Ctrl+D触发EOF。我们可以改为直接读取所有输入行,直到遇到EOF,这样用户最后一次输入后直接按Ctrl+D即可结束流程。
修改后的代码:
food_menu = { "Baja Taco": 4.00, "Burrito": 7.50, "Bowl": 8.50, "Nachos": 11.00, "Quesadilla": 8.50, "Super Burrito": 8.50, "Super Quesadilla": 9.50, "Taco": 3.00, "Tortilla Salad": 8.00 } cost = [] # 读取所有输入行,直到用户按下Ctrl+D触发EOF import sys for line in sys.stdin: item = line.strip().title() if item in food_menu: cost.append(food_menu[item]) # 无效项直接忽略,继续处理下一行 total = sum(cost) print(f"Total: ${total:.2f}")
修改说明
- 改用
sys.stdin遍历输入:自动在EOF时终止循环,无需手动捕获EOFError,也不会重复弹出输入提示。 - 增加
strip()处理:去除每行输入的首尾空白(包括换行符),避免因格式问题导致商品匹配失败。 - 简化总价输出:使用f-string直接完成格式化,代码更简洁直观。
优化后的输入流程:
- 输入第一个商品 → 回车
- 输入第二个商品 → 回车
- 输入第三个商品 → 直接按Ctrl+D
程序会立刻计算并输出总价,无需额外回车操作。
内容的提问来源于stack exchange,提问作者Tanvi Khokhar
相关产品推荐
相关产品推荐

