You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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}")

修改说明

  1. 改用sys.stdin遍历输入:自动在EOF时终止循环,无需手动捕获EOFError,也不会重复弹出输入提示。
  2. 增加strip()处理:去除每行输入的首尾空白(包括换行符),避免因格式问题导致商品匹配失败。
  3. 简化总价输出:使用f-string直接完成格式化,代码更简洁直观。

优化后的输入流程:

  • 输入第一个商品 → 回车
  • 输入第二个商品 → 回车
  • 输入第三个商品 → 直接按Ctrl+D
    程序会立刻计算并输出总价,无需额外回车操作。

内容的提问来源于stack exchange,提问作者Tanvi Khokhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:20:22