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
相关产品推荐
相关产品推荐

