Python中的精确变化

2024-10-02 22:29:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图用Python编写一段代码,以最少的硬币和每行一种硬币类型输出精确的更改。硬币类型有美元、25美分、10美分、5美分和1美分。我还必须使用单数和复数硬币名称,如1便士对2便士。当我输入45并运行代码时,我得到一个错误消息(您的程序没有输出)。这是我的密码:

total_change = int(input())

if total_change <= 0:
print('No change')

if total_change >= 100:
dollar = total_change//100
dollar_change = total_change % 100
if dollar == 1:
    print(dollar + ' Dollar')
elif dollar > 1:
    print(dollar + ' Dollars')
    
elif dollar_change >= 25:
    quarter = dollar_change//25
    quarter_change = dollar_change % 25
    if quarter == 1:
        print(quarter + ' Quarter')
    elif quarter > 1:
        print(quarter + ' Quarters')
        
    elif quarter_change >= 10:
        dime = quarter_change // 10
        dime_change = quarter_change % 10
        if dime == 1:
            print(dime + ' Dime')
        elif dime > 1:
            print(dime + ' Dimes')
            
        elif dime_change >= 5:
            nickel = dime_change // 5
            nickel_change = dime_change % 5
            if nickel == 1:
                print(nickel + ' Nickel')
            elif nickel > 1:
                print(nickel + ' Nickels')
                
        elif nickel_change >= 1:
                penny = nickel_change // 1
                if penny == 1:
                    print(penny + ' Penny')
                else:
                    print(penny + ' Pennies')
                
                

Tags: 代码类型if硬币changetotalprintelif
1条回答
网友
1楼 · 发布于 2024-10-02 22:29:42

您的代码有许多需要解决的问题,包括缺少输入值0<total_change<;缩进的问题(应该对齐elif块)、不必要的变量(不需要像nickel_changedime_change-total_change这样的变量才是最重要的),并且您尝试打印dollar + ' Dollar',即使dollar是一个数字变量

我想改进代码中的问题,使其功能化,但不完全重写您的工作。所以,我将要提供的代码的基本框架是相同的

我使用了递归的方法。我有以下功能和您的所有(已清理)代码:

def printCurrency(total_change):
    dollar = total_change//100
    dollar_change = total_change % 100
    if dollar == 1:
        print(str(dollar) + ' Dollar')
        printCurrency(total_change-1*100)
    elif dollar > 1:
        print(str(dollar) + ' Dollars')
        printCurrency(total_change-dollar*100)
    elif dollar_change >= 25:
        quarter = dollar_change//25
        quarter_change = dollar_change % 25
        if quarter == 1:
            print(str(quarter) + ' Quarter')
            printCurrency(total_change-1*25)
        elif quarter > 1:
            print(str(quarter) + ' Quarters')
            printCurrency(total_change-quarter*25)
    elif dollar_change >= 10:
        dime = dollar_change // 10
        dime_change = dollar_change % 10
        if dime == 1:
            print(str(dime) + ' Dime')
            printCurrency(total_change-1*10)
        elif dime > 1:
            print(str(dime) + ' Dimes')
            printCurrency(total_change-dime*10)
    elif dollar_change >= 5:
        nickel = dollar_change // 5
        nickel_change = dollar_change % 5
        if nickel == 1:
            print(str(nickel) + ' Nickel')
            printCurrency(total_change-1*5)
        elif nickel > 1:
            print(str(nickel) + ' Nickels')
            printCurrency(total_change-nickel*5)
    elif dollar_change >= 1:
            penny = dollar_change // 1
            if penny == 1:
                print(str(penny) + ' Penny')
                printCurrency(total_change-1*1)
            else:
                print(str(penny) + ' Pennies')
                printCurrency(total_change-penny*1)

请注意,每次打印一行时,函数都会再次运行,但在减去已处理的更改之后

举几个例子:

>>> printCurrency(45)
1 Quarter
2 Dimes
>>> printCurrency(101)
1 Dollar
1 Penny
>>> printCurrency(349)
3 Dollars
1 Quarter
2 Dimes
4 Pennies

要将其与原始框架结合起来,请使用输入

total_change = int(input())

if total_change <= 0:
    print('No change')

if total_change >= 0:
    printCurrency(total_change)

如果您对我对您的代码所做的更改有任何疑问,请告诉我

相关问题 更多 >