首页 > 解决方案 > Python中的确切变化

问题描述

我正在尝试用 Python 编写代码,以使用最少的硬币和每行一种硬币类型输出精确的变化。硬币类型有美元、夸特、角钱、镍币和便士。我还必须酌情使用单数和复数硬币名称,例如 1 Penny vs. 2 Pennies。当我输入 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')
                
                

标签: pythonif-statementinput

解决方案


您的代码有许多需要解决的问题,包括缺少输入值 0 < total_change< 100 的条件、缩进问题(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)

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


推荐阅读