Python实验:Exact Change函数无输出问题排查求助
找零计算程序无输出问题排查
问题描述
修改程序后运行无输出,作为编程新手请求指出遗漏问题。
实验要求
- 定义
exact_change函数,接收以美分为单位的总找零金额,用最少硬币(penny、nickel、dime、quarter)计算找零 - 主程序读取整数输入,调用该函数并按行输出找零,注意单复数形式
- 输入≤0时输出“no change”
- 函数需返回
num_pennies、num_nickels、num_dimes、num_quarters
现有代码
def exact_change(user_total): return(num_dollars, num_quarters, num_dimes, num_nickles, num_pennies) if __name__ == '__main__': input_val = float(input()) num_dollars = input_val // 100 rem=input_val % 100 num_quarters = rem // 25 rem = rem % 25 num_dimes = rem // 10 rem = rem % 10 num_nickles = rem // 5 rem = rem % 5 num_pennies = rem if input_val <= 0: print("no change") else: num_pennies = rem conv_penny = str(int(num_pennies)) rem = rem % 1 if num_pennies == 1: print(conv_penny + ' penny') elif num_pennies > 1: print(conv_penny + ' pennies') num_nickels = rem // 5 conv_nickel = str(int(num_nickels)) rem = rem % 5 if num_nickels == 1: print(conv_nickel + ' nickel') elif num_nickels > 1: print(conv_nickel + ' nickels') num_dimes = rem // 10 conv_dime = str(int(num_dimes)) rem = rem % 10 if num_dimes == 1: print(conv_dime + ' dime') elif num_dimes > 1: print(conv_dime + ' dimes') num_quarters = rem // 25 conv_quarter = str(int(num_quarters)) rem = rem % 25 if num_quarters == 1: print(conv_quarter + ' quarter') elif num_quarters > 1: print(conv_quarter + ' quarters') num_dollars = input_val // 100 conv_dollar = str(int(num_dollars)) rem = input_val % 100 if num_dollars == 1: print(conv_dollar + ' dollar') elif num_dollars > 1: print(conv_dollar + ' dollars')
问题分析与修正
核心问题
- 未调用
exact_change函数:实验要求主程序调用该函数,但现有代码完全没用到这个函数,且函数本身未实现逻辑,返回的变量都未定义,直接运行会报错。 - 输入处理错误:题目要求输入是整数,却用了
float(input()),浮点运算可能带来精度问题,应该用int(input())。 - 重复计算且顺序错误:在else块里重新计算各面额时,先处理penny后执行
rem = rem % 1,此时rem变为0,后续nickel、dime、quarter的计算结果都是0,自然没有输出;正确的计算顺序应该从大面额到小面额,避免重复计算。 - 变量拼写不一致:函数里写的是
num_nickles,主程序里是num_nickels,拼写错误会导致报错。 - 函数返回值不符合要求:实验要求返回
num_pennies、num_nickels、num_dimes、num_quarters,现有函数返回的是美元和其他面额,顺序也不对。
修正后的代码
def exact_change(user_total): # 从大到小计算各硬币数量 num_quarters = user_total // 25 rem = user_total % 25 num_dimes = rem // 10 rem = rem % 10 num_nickels = rem // 5 num_pennies = rem % 5 # 按要求顺序返回结果 return num_pennies, num_nickels, num_dimes, num_quarters if __name__ == '__main__': # 读取整数输入 input_val = int(input()) if input_val <= 0: print("no change") else: # 调用函数获取硬币数量 num_pennies, num_nickels, num_dimes, num_quarters = exact_change(input_val) # 计算美元数量(实验要求函数不返回美元,主程序自行处理) num_dollars = input_val // 100 # 按大到小顺序输出各面额,处理单复数 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")
修正说明
- 实现了
exact_change函数的核心逻辑,按要求返回四个硬币数量 - 主程序读取整数输入,调用函数获取结果后按大到小顺序输出各面额,处理单复数
- 移除了重复计算的逻辑,避免因rem被修改导致后续面额计算为0的问题
- 修正了变量拼写错误,确保代码可正常运行
内容的提问来源于stack exchange,提问作者dglr007
相关产品推荐
相关产品推荐

