Python pay函数执行print却未按预期返回True/False的问题求助
问题原因与解决方法
核心问题:重复调用pay函数导致返回值混乱
你在调用代码里连续执行了三次pay(choice),每一次调用都会重新触发整个函数流程:包括让你输入硬币、重新计算预算、更新全局变量。这就导致你看到的打印语句是第一次调用的结果,但后续print(pay(choice))和if判断里的返回值,是第二次、第三次重新输入硬币后的结果,自然和你预期的第一次返回值不符。
看你的调用代码:
if enough(choice)== True: pay(choice) # 第一次调用:输入硬币,执行逻辑,返回值直接丢弃 print(pay(choice)) # 第二次调用:再次输入硬币,打印这次的返回值 if pay(choice) == True: # 第三次调用:第三次输入硬币,用这次结果判断 make_coffee(choice) else: print("Nope")
比如第一次你输入了足够的硬币,函数返回True,但第二次你可能随便输入了不够的金额,返回False,你就会误以为第一次的返回值不对,实际是重复调用导致的问题。
解决办法:只调用一次pay函数,保存返回值
把pay(choice)的返回值存到一个变量里,之后所有操作都用这个变量,避免重复调用:
if enough(choice) == True: # 只调用一次pay函数,把返回值存在变量里 payment_success = pay(choice) print(payment_success) if payment_success: make_coffee(choice) else: print("Nope")
额外优化:避免浮点数精度问题
因为Python里浮点数计算有精度误差(比如0.1 + 0.2不等于0.3),你可以把金额转换成整数(以分为单位)来计算,避免预算和价格比较时出现错误:
def pay(ch): # 把价格转成分为单位的整数,避免浮点数误差 price = int(MENU[ch]["cost"] * 100) quarters = int(input("How many quarters?")) * 25 dimes = int(input("How many dimes?")) * 10 nickles = int(input("How many nickles?")) * 5 pennies = int(input("How many pennies?")) * 1 budget = quarters + dimes + nickles + pennies global money if budget >= price: # 如果money是美元单位,再转换回小数 money += price / 100 change = (budget - price) / 100 print(f"Your change: {round(change, 2)} ") return True else: print("Not enough money") return False
内容的提问来源于stack exchange,提问作者Retr0
相关产品推荐
相关产品推荐

