Python购物车代码仅累加最后一项商品价格的问题求助
问题分析与修复
核心问题
你的代码存在几个关键错误,导致输入done后仅计算最后一项商品的价格:
- stock字典语法非法:直接在字典中写入
"Fruit"这类分类文本但未设置对应值,会触发语法报错,程序根本无法正常运行。 - 购物车混入无效项:输入的
done、cart、stock这些命令会被加入购物车,计算总价时需要排除这类非商品项。 - 计价函数逻辑混乱:
shopping_bill里的三层嵌套循环完全错误,break语句导致循环仅执行一次,item == key in prices的判断逻辑也不成立,最终只累加了最后一个匹配项的价格。
修复后的完整代码
# 初始化购物车,移除多余的空字符串初始值 shopping_cart = [] food = shopping_cart # 库存字典:修正语法错误,用注释分类而非非法键值对 stock = { # Fruit "banana": 50, "apple": 15, "orange": 32, "pear": 15, # Drinks "apple juice": 10, "orange juice": 10, "pineapple juice": 10, # 修正拼写错误:pinapple → pineapple "milk": 15, # Snacks "chips": 20, "cookies": 20, "chocolate": 25, "lollies": 50 } # 价格字典 prices = { # Fruit "banana": 10, "apple": 5, "orange": 5, "pear": 5, # Drinks "apple juice": 5, "orange juice": 5, "pineapple juice": 5, # 同步拼写修正 "milk": 4.80, # Snacks "chips": 7, "cookies": 4, "chocolate": 6, "lollies": 5.50 } # 交互循环:先处理命令,再添加商品到购物车 while True: item = input("Enter an item: ").lower() if item == 'done': break if item == 'cart': print(shopping_cart) continue # 跳过添加到购物车的步骤 if item == 'stock': for k, v in stock.items(): print(f"{k}: {v}") continue # 跳过添加到购物车的步骤 # 仅将非命令的商品项加入购物车 shopping_cart.append(item) # 计价函数:简化逻辑,遍历购物车有效项计算总价 def shopping_bill(food): total = 0.0 for item in food: # 检查商品是否在价格表中,避免触发KeyError if item in prices: total += prices[item] print(f"Your bill total equals $ {total:.2f}") # 格式化显示两位小数 print("Thank you for shopping at B&K Supermarket!") shopping_bill(food)
关键修复说明
- 修正字典语法:将分类文本改为注释,确保stock字典结构合法,同时修正了
pinapple的拼写错误。 - 优化交互逻辑:先处理
done、cart、stock命令,用continue跳过添加到购物车的步骤,避免无效项混入。 - 重构计价逻辑:直接遍历购物车中的每一项,检查是否在价格字典中后累加对应价格,逻辑清晰且正确。
- 格式化输出:用
:.2f确保总价以两位小数的货币格式显示。
内容的提问来源于stack exchange,提问作者Swift AU
相关产品推荐
相关产品推荐

