python - 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')
解决方案
您的代码有许多需要解决的问题,包括缺少输入值 0 < total_change
< 100 的条件、缩进问题(elif
块应对齐)、不必要的变量(您不需要像nickel_change
和dime_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)
如果您对我对您的代码所做的更改有任何疑问,请告诉我!
推荐阅读
- python - python 3.7,为什么主角先走却输了?
- r - 在 iGraph 中模拟网络后添加组成员作为节点属性
- html - 如何为 html 表中的每条记录显示一种随机背景颜色
- android - 在 DialogFragment 中附加时,Android 侦听器始终为空
- javascript - 在 react redux 中映射 JSON 数据时遇到问题
- php - 正确删除cookie,但它仍然存在?
- javascript - 如何让我的 react-multi-carousel 为我的 ReactJS 应用程序使用灯箱功能
- odoo-12 - 从选择库存表单视图继承按钮 Odoo 12
- python-3.x - Python写入文本文件有时不起作用
- fonts - 将 Font Awesome 与购物车计数器一起使用