这可以通过使用循环来实现吗?或者用列表?

2024-04-25 23:37:08 发布

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

我写这篇文章是为了计算需要兑换的纸币和硬币的最小数量。这可以用循环来完成吗?你知道吗

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) 

Tags: oneschangeintprintbalancefiveuserdime
3条回答

这是一个好时机(好吧,这是总是一个好时机),让事情变得更简单,首先考虑数据结构。您有一个货币(键)列表,对于每个键,您希望为(值)找到一个唯一的金额。k: v对意味着一个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

(无论何时使用%=操作符,您都会感到很酷)

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

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

把你的N放在一个列表中,然后在上面循环,把你的x放在另一个列表中。
高级信用卡使用map。你知道吗

编辑:根据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)

相关问题 更多 >