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

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')

问题分析与修正

核心问题

  1. 未调用exact_change函数:实验要求主程序调用该函数,但现有代码完全没用到这个函数,且函数本身未实现逻辑,返回的变量都未定义,直接运行会报错。
  2. 输入处理错误:题目要求输入是整数,却用了float(input()),浮点运算可能带来精度问题,应该用int(input())。
  3. 重复计算且顺序错误:在else块里重新计算各面额时,先处理penny后执行rem = rem % 1,此时rem变为0,后续nickel、dime、quarter的计算结果都是0,自然没有输出;正确的计算顺序应该从大面额到小面额,避免重复计算。
  4. 变量拼写不一致:函数里写的是num_nickles,主程序里是num_nickels,拼写错误会导致报错。
  5. 函数返回值不符合要求:实验要求返回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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:10:42