Python自动售货机程序开发:用户选择汇总与总金额计算求助
Python自动售货机总金额计算修复方案
现有代码核心问题
- 存储用户选择的
choices列表定义在while循环内部,每次循环都会被重置为空,无法累计用户的历史选择记录 - 初始
userchoice被定义为空元组,和后续判断的0类型不匹配,存在逻辑隐患 - 用户选择是商品序号,用
float转换格式不合理,应该用int - 缺少商品编号和对应价格的映射规则,原有
Sum函数逻辑完全不符合累加需求 - 欢迎语、商品列表放在循环内部,每次选择都会重复打印,使用体验差
修正后可运行代码
def main(): # 定义商品编号和对应价格、名称的映射,后续改价格加商品直接改这里就行 goods_map = { 1: {"name": "Dr.Pepper", "price": 1.50}, 2: {"name": "Mtn.Dew", "price": 1.50}, 3: {"name": "Water", "price": 1.00}, 4: {"name": "Doritos", "price": 1.75}, 5: {"name": "Snickers", "price": 1.50}, 6: {"name": "Gum", "price": 0.50} } userchoice = None choices = [] # 欢迎和商品列表只打印一次 print("欢迎使用自动售货机!") show_options(goods_map) while userchoice != 0: userchoice = int(input("请输入对应商品的编号选择商品,输入0退出结算:")) if userchoice == 0: # 退出时计算总金额 total = sum([goods_map[c]["price"] for c in choices]) print(f"您选购的商品总金额为:${total:.2f}") # 支付校验、找零逻辑 if total > 0: while True: pay_amount = float(input("请输入支付金额:")) if pay_amount < total: print("支付金额不足,请重新输入") else: change = pay_amount - total print(f"支付成功,找零:${change:.2f},感谢您的购买!") break else: print("您未选购任何商品,欢迎下次光临") elif userchoice in goods_map: choices.append(userchoice) print(f"您选择了:{goods_map[userchoice]['name']},价格${goods_map[userchoice]['price']:.2f}") else: print("无效的选择,请重新输入") def show_options(goods_map): for num, info in goods_map.items(): print(f"\t{num}. {info['name']} - ${info['price']:.2f}") if __name__ == "__main__": main()
内容的提问来源于stack exchange,提问作者Ethan
相关产品推荐
相关产品推荐

