找出python中的零钱

时间:2018-09-19 04:02:21

标签: python currency

我有一个任务,我必须提示用户输入产品的成本和付款金额,我必须输出便士,角钱,硬币,$ 1,$ 5,$ 20,$ 50和$ 100的零钱,例如:该商品的价格为19.99美元,客户支付50美元的账单。将提供的零钱是1张20美元的钞票,一张10美元的钞票和一分钱。 我很困惑如何获得这样的输出,任何帮助将不胜感激,这是我到目前为止所拥有的

cost = float(input('Cost: '))
amount_paid = float(input('Amount paid: '))
penny = 0.01
dime = 0.10
quarter = 0.25
dollar_1 = 1.00
dollar_5 = 5.00
dollar_10 = 10.00
dollar_20 = 20.00
dollar_50 = 50.00
dollar_100 = 100.00
change = cost - amount_paid
if amount_paid < cost:
    print('Error')

我不知道下一步该怎么做

4 个答案:

答案 0 :(得分:1)

这里常见的失误是使用浮点数。您应该将所有内容都转换为最小的整体单位(一美分),然后使用整数数学。浮点数学运算很模糊。

currencies = {"penny": 1,
              "nickel": 5,
              "dime": 10,
              "quarter": 25,
              "dollar": 1_00,
              "five": 5_00,
              "ten": 10_00,
              "twenty": 20_00,
              "fifty": 50_00,
              "hundred": 100_00}
# never seen that numeric notation before? It's safe to embed underscores
# in numerical literals! It's often used for large numbers in place of
# commas, but it makes sense here in place of a period.

然后,您只需要为结果定义一个字典,并使用divmod来查找可以应付的剩余面额中有多少种面额。

change_due = {}

for denomination, amt in reversed(currencies.items()):
    if amt < amt_due:
        d, m = divmod(amt_due, amt)
        change_due[denomination] = d
        amt_due = m

答案 1 :(得分:1)

欢迎来到stackoverflow!我为您编写了代码,这就是它的工作方式。基本上,它查看每种货币,并使用整数除法//来查看可以容纳多少个整数。然后从剩余的更改中减去该金额,然后继续进行该过程。请询问您是否不了解某些内容,或认为有错误。 代码:

cost = float(input('Cost: '))
amount_paid = float(input('Amount paid: '))
penny = 0.01
dime = 0.10
quarter = 0.25
dollar_1 = 1.00
dollar_5 = 5.00
dollar_10 = 10.00
dollar_20 = 20.00
dollar_50 = 50.00
dollar_100 = 100.00
changeTypes = {dollar_100:0,dollar_50:0,dollar_20:0,dollar_10:0,dollar_5:0,dollar_1:0,quarter:0,dime:0,penny:0}
change = amount_paid-cost
if amount_paid < cost:
    print('Error: InsufficientFunds')
for changeType in changeTypes:
    numAmount = max(0,change//changeType)
    change-=numAmount*changeType
    changeTypes[changeType] = int(numAmount)


print(changeTypes)

P.S,您应该将此功能设为功能,应该不会太难。

答案 2 :(得分:0)

您可以使用字典来做到这一点,但是如果不使用字典,还有很多方法可以解决,选择无穷无尽,这是一个主意

def get_bills(change, value):
    if change//value > 0:
        bills = change//value
        change -= bills * value
        return bills, change
    else:
        return 0, change

cost = float(input('Cost: '))
paid = float(input('Amount Paid: '))
while paid < cost:
    paid = float(input('Amount Paid: '))

change = paid - cost

hundreds, change, = get_bills(change, 100)

fifties, change, = get_bills(change, 50)

twenties, change = get_bills(change, 20) 

tens, change = get_bills(change, 10) 

fives, change = get_bills(change, 5)

ones, change = get_bills(change, 1)

quarters, change = get_bills(change, .25)

dimes, change = get_bills(change, .1) 

nickels, change = get_bills(change, .05)

pennies = round(change * 100)

print(f"Hundreds: {hundreds}, Fifties: {fifties}, Twenties: {twenties}," +
      f" Tens: {tens}, Fives: {fives}, Ones: {ones}, Quarters: {quarters}," +  
      f" Dimes: {dimes}, Nickels: {nickels}, Pennies: " +
      f"{pennies}")

答案 3 :(得分:0)

    bill = float(input())
paid = float(input())
Available = {100.0:0,50.0:0,20.0:0,10.0:0,5.0:0,1.0:0,0.25:0,0.10:0,0.01:0}
due = paid-bill
for change in sorted(Available,reverse = True):
    amt= max(0,due//change)
    due-=amt*change
    Available[change] = int(amt)
print(Available)