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

Python找零函数exact_change无法正常返回值问题排查

问题原因分析
  • exact_change函数参数未使用,错误依赖全局变量
    函数定义时已经声明接收user_total入参,但内部所有计算逻辑全程使用全局变量input_val,虽然当前调用时刚好传入的是input_val暂时能得到正确结果,但如果后续传入其他参数,函数返回值会完全出错,不符合封装逻辑。
  • 主函数覆盖了函数返回的结果
    你已经通过num_dollars, num_quarters, num_dimes, num_nickels, num_pennies = exact_change(input_val)拿到了函数的返回值,但后续在else分支里又重新计算了所有硬币数量,直接把函数返回的变量值全部覆盖,等于完全没有用到函数的返回结果,自然会觉得函数没有按预期返回。
修正方案

首先修改exact_change函数,替换全局变量为入参:

def exact_change(user_total):
    num_dollars = user_total // 100
    rem = user_total % 100
    num_quarters = rem // 25
    rem = rem % 25
    num_dimes = rem // 10
    rem = rem % 10
    num_nickels = rem // 5
    rem = rem % 5
    num_pennies = rem
    return num_dollars, num_quarters, num_dimes, num_nickels, num_pennies

再修改主函数,删除重复计算逻辑,直接使用函数返回结果:

if __name__ == '__main__': 
    input_val = int(input())
    if input_val <= 0: 
        print("no change")
    else:
        num_dollars, num_quarters, num_dimes, num_nickels, num_pennies = exact_change(input_val)
        if num_dollars == 1: 
            print(f'{num_dollars} dollar')
        elif num_dollars > 1: 
            print(f'{num_dollars} dollars')
        if num_quarters == 1:
            print(f'{num_quarters} quarter')
        elif num_quarters > 1:
            print(f'{num_quarters} quarters')
        if num_dimes == 1:
            print(f'{num_dimes} dime')
        elif num_dimes > 1:
            print(f'{num_dimes} dimes')
        if num_nickels==1:
            print(f'{num_nickels} nickel')
        elif num_nickels > 1:
            print(f'{num_nickels} nickels')
        if num_pennies == 1:
            print(f'{num_pennies} penny')
        elif num_pennies > 1:
            print(f'{num_pennies} pennies')

内容的提问来源于stack exchange,提问作者Gman12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:54:02