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

Python技术疑问:如何基于输入累加Dictionary值更新计数器

解决商品累计总价计算问题

你的核心问题是总价变量total的初始化位置错误,每次循环都会把total重置为0,导致无法累加之前的输入;另外商品字典items放在while循环内部完全没必要,每次循环都会重复创建,建议移到循环外。

下面是修正后的代码,完全用基础的循环、条件语句实现:

# 把商品字典放在循环外,只创建一次
items = {
    "banana": 1.00,
    "avocado": 2.50,
    "tomato": 1.00,
    "cabbage": 5.00,
    "cauliflower": 4.50,
    "salad bowl": 6.50,
    "spinach": 3.50,
}      
# 初始化总价在循环外,确保每次循环都能保留之前的累计值
total = 0

while True:
    # 接收用户输入并转为小写
    item = input("Item: ").lower()
    
    # 处理空输入(直接回车退出循环)
    if not item:
        break
    
    # 检查输入的商品是否在字典中,是则累加价格
    if item in items:
        total += items[item]
    
    # 输出当前累计总价
    print(total)

运行演示

Item: banana
1.0
Item: banana
2.0
Item: avocado
4.5
Item: 

关键修改说明

  1. 将total初始化移到while循环外:这样每次循环时,total会保留上一次累加后的结果,而不是被重置为0。
  2. 将items字典移到循环外:避免每次循环重复创建相同的字典,提升代码效率。
  3. 增加空输入退出逻辑:输入空值(直接回车)时退出循环,避免无限循环。

如果你坚持要用for循环来检查商品,也可以改成这样:

items = {
    "banana": 1.00,
    "avocado": 2.50,
    "tomato": 1.00,
    "cabbage": 5.00,
    "cauliflower": 4.50,
    "salad bowl": 6.50,
    "spinach": 3.50,
}      
total = 0

while True:
    item = input("Item: ").lower()
    
    if not item:
        break
    
    # 用for循环遍历商品键,匹配则累加
    for key in items.keys():
        if item == key:
            total += items[key]
            break  # 找到匹配项后退出循环,避免多余遍历
    
    print(total)

这个版本用了for循环+if语句,和你之前的尝试不同的是:

  • total初始化在循环外,不会被重置
  • 找到匹配的商品后用break终止循环,避免不必要的遍历

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:10:23