You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 02:17:46