Python自动售货机程序问题求助:提示不显示与变量未定义
修复Python自动售货机程序的两个问题
问题1:user_val未定义错误
你的代码在执行if int(float(user_val)) == 0:判断时,user_val还未被赋值——因为user_val = float(input())这条赋值语句在判断逻辑之后,Python解释器会优先执行前面的代码,此时变量还不存在,因此抛出未定义错误。
解决方法:调整代码顺序,先获取用户输入,再进行判断;如果需要提前进入循环,也可以先初始化user_val为非0值。
问题2:“0 to cancel”提示无法显示且位置错误
原来的逻辑是当user_val为0时才打印提示,但此时用户还未输入,这个判断根本无法触发。你需要在展示完所有货币选项后、用户输入前,直接打印提示,明确告知用户输入0可取消操作。
另外,你提到需要通过循环模拟操作,输入0终止循环,因此需要给代码添加while循环结构。
修复后的完整代码
print("*********************************") print("Welcome to Vending Machine Bravo!") print("*********************************") print("If you would like to make a selection, please insert the appropriate currency into the machine.") # Currency deposit num_5Dollars = 5.00 num_Dollars = 1.00 num_Quarters = .25 num_Dimes = .10 num_Nickels = .05 num_Pennies = .01 currency = [num_5Dollars, num_Dollars, num_Quarters, num_Dimes, num_Nickels, num_Pennies] # 循环模拟操作,直到用户输入0终止 while True: # 打印货币选项 print("\nAvailable currency options:") print("5.00 for $5 bills") print("1.00 for $1 bills") print(".25 for Quarters") print(".10 for dimes") print(".05 for nickels") print(".01 for pennies") # 在输入前打印取消提示 print("0 to cancel") # 获取用户输入并处理非法值 try: user_val = float(input("Enter your selection: ")) except ValueError: print("Invalid input, please enter a number.") continue # 判断是否取消操作 if int(user_val) == 0: print("Operation cancelled.") break # 处理有效货币输入 elif user_val in currency: print(f"Accepted {user_val}") # 可在此添加金额累加、商品选择等后续逻辑 else: print("Invalid currency, please try again.")
关键修复点说明
- 将货币选项打印逻辑放入循环,每次循环重新展示选项,符合售货机重复操作的场景
- 在用户输入之前直接打印
0 to cancel提示,确保用户能看到操作指引 - 先执行
user_val = float(input())获取输入,再进行判断,彻底解决变量未定义问题 - 添加
try-except捕获非法输入(如用户输入非数字内容),提升程序健壮性 - 使用
while True循环,当用户输入0时执行break终止循环,实现需求的终止逻辑
内容的提问来源于stack exchange,提问作者adri
相关产品推荐
相关产品推荐

