带用户输入的购物清单循环程序:金额累计与总计输出问题
购物清单程序问题修复
问题概述
开发的购物清单循环程序目标功能:
- 用字典
groceryList存储productID、weight、price,退出时打印完整清单; - 持续循环供用户选择商品,直至退出,每次计算该商品的重量(KG)×单价;
- 退出时计算并打印所有商品的总金额。
当前存在的问题:
- 无法正确累计每次选购商品的金额;
- 不知道如何在退出时计算总金额;
- 无法正确打印购物清单至屏幕。
问题分析与修复方案
问题1:金额累计错误
原代码用total = lambda w, p: w * p重新赋值total变量,这只是定义了单商品金额的计算逻辑,没有实现累加。正确做法是每次将当前商品的金额(w * p)加到总金额变量中。
问题2:退出时总金额计算
可以在循环过程中维护总金额变量进行累加,退出时直接打印;也可在退出后遍历存储的商品数据重新计算,前者更高效。
问题3:购物清单打印错误
- 原代码未将用户输入的重量
w添加到kG列表,导致打印时重量数据为空; - 循环遍历长度取的是字典值列表的长度(固定为3),实际应取商品数量(即
productID列表的长度)。
修正后的完整代码
# 存储商品信息的字典 groceryList = {"productID": [], "weight": [], "price": []} # 提取各字段的列表(简化后续操作) product_ids = groceryList["productID"] weights = groceryList["weight"] prices = groceryList["price"] total_amount = 0 while True: try: choice = int(input("1.SELECT\n2.EXIT\n请选择1或2:")) if choice == 1: prod_id = int(input("请输入商品ID:")) weight = float(input("请输入购买重量(KG):")) price = float(input("请输入商品单价:")) # 将商品信息添加到对应列表 product_ids.append(prod_id) weights.append(weight) prices.append(price) # 计算当前商品金额并累加到总金额 current_item_total = weight * price total_amount += current_item_total print(f"\n当前商品金额:{current_item_total:.2f},累计总金额:{total_amount:.2f}") elif choice == 2: break else: print("无效选项,请重新选择。") except ValueError: print("输入格式错误,请输入数字。") # 打印购物清单 print("\n\n=== 购物清单 ===") print(f"{'商品ID':<8}{'重量(KG)':<12}{'单价':<8}{'金额':<8}") for idx in range(len(product_ids)): item_total = weights[idx] * prices[idx] print(f"{product_ids[idx]:<8}{weights[idx]:<12.2f}{prices[idx]:<8.2f}{item_total:<8.2f}") # 打印总金额 print(f"\n总金额:{total_amount:.2f}")
修复说明
- 金额累计:新增
current_item_total计算单商品金额,通过total_amount += current_item_total实现累加; - 总金额计算:循环中持续维护
total_amount变量,退出时直接打印即可; - 清单打印:
- 补充了重量数据添加到列表的操作;
- 以商品数量(
len(product_ids))作为循环次数,保证所有商品都被打印; - 添加表头并使用格式化输出,让清单格式更清晰,金额显示保留两位小数更符合实际场景。
内容的提问来源于stack exchange,提问作者Rendevouz
相关产品推荐
相关产品推荐

