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:
关键修改说明
- 将
total初始化移到while循环外:这样每次循环时,total会保留上一次累加后的结果,而不是被重置为0。 - 将
items字典移到循环外:避免每次循环重复创建相同的字典,提升代码效率。 - 增加空输入退出逻辑:输入空值(直接回车)时退出循环,避免无限循环。
如果你坚持要用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
相关产品推荐
相关产品推荐

