2

我写这个是为了计算找零所需的最小纸币和硬币数量。这可以使用循环来完成吗?

def user_change(balance):
        twen = int(balance/20)
        balance=balance%20
        ten = int(balance/10)
        balance=balance%10
        five = int(balance/5)
        balance = balance%5
        ones = int(balance/1)
        balance = balance%1
        quart = int( balance/0.25)
        balance = balance%0.25
        dime = int(balance/0.10)
        balance = balance%0.10
        nickel = int(balance/0.05)
        balance = balance%0.05
        pennies = int(balance/0.05)
        print twen
        print ten
        print five
        print ones
        print quart
        print dime
        print nickel
        print pennies

    user_change(34.36) 
4

4 回答 4

7

这是一个让自己更轻松并首先考虑数据结构的好时机(好吧,这总是一个好时机)。您有一个货币(键)列表,对于每个键,您希望为(值)找到一个唯一金额。k:v 配对意味着 a dict,所以填写一个来代替打印值;以后可以随时打印...

def make_change(bal):
    currency = [20,10,5,1,.25,.1,.05,.01]
    change = {}
    for unit in currency:
        change[unit] = int(bal // unit)
        bal %= unit
    return change

(每当您使用%=操作员时,您应该会感到很酷)

于 2013-07-31T03:33:24.137 回答
1

是的,它可以。看看重复的

x=int(balance/N)
balance=balance%N

将您的 N 放在一个列表中,然后遍历它们,将您的 x 收集到另一个列表中。
用于高级信用使用map

于 2013-07-31T03:15:59.090 回答
1

当然,让我们制作一个值列表并对其进行映射。

def user_change(balance):
  values = [20, 10, 5, 1, 0.25, 0.10, 0.05, 0.01]
  for value in values:
    print(int(balance/value))
    balance = balance % value
于 2013-07-31T03:17:18.203 回答
1

编辑:根据 roippi@ 建议更新答案:

from collections import OrderedDict

_currency_values = [ 
    ('twenties',20),
    ('tens',10),
    ('fives',5),
    ('ones',1),
    ('quarters',0.25),
    ('dimes',0.10),
    ('nickels',0.05),
    ('pennies',0.01),
]
currency_values = OrderedDict(_currency_values)

def user_change(balance):
    user_change_results = []
    for currency in currency_values.keys():
        #print balance
        if balance == 0:
            break
        currency_amount = currency_values[currency]
        currency_change_amount = balance//currency_amount
        user_change_results.append((currency,currency_change_amount))
        balance-=(currency_change_amount*currency_amount)

    return user_change_results

if __name__ == '__main__':
    print user_change(34.36)

原始回复:

这是我的方法。与 roippi@ 类似,但具有每种货币金额的描述符:

currency_values = {
    'twenties' : 20,
    'tens' : 10,
    'fives' : 5,
    'ones' : 1,
    'quarters' : 0.25,
    'dimes' : 0.10,
    'nickels' : 0.05,
    'pennies' : 0.01,
}

currency_order = ['twenties','tens','fives','ones','quarters','dimes','nickels','pennies']

def user_change(balance):
    user_change_results = []
    for currency in currency_order:
        #print balance
        if balance == 0:
            break
        currency_amount = currency_values[currency]
        currency_change_amount = balance//currency_amount
        user_change_results.append((currency,currency_change_amount))
        balance-=(currency_change_amount*currency_amount)

    return user_change_results

if __name__ == '__main__':
    print user_change(34.36)
于 2013-07-31T03:37:19.450 回答