0

django プロジェクトに取り組んでいます。私の支払いモデルでは、単純な定義保存があります

def save(self, *args, **kwargs):
    self.amount_change = self.amount_due - self.amount_paid
    return super(Payment, self).save(*args, **kwargs)

私の amount_change が来た場合、次の-455.50ように変更を返したい

  • 2x200
  • 1x50
  • 1x5
  • 1x0.5

私がやりたいことは、 amount_change を私が持っている金種に分解し、正しい紙幣や硬貨でおつりをクライアントに返すことです。私の宗派は [200, 100, 50, 20, 10, 5, 1, 0.5] です。

どうすればこれを行うことができますか?どんな助けでも大歓迎です。

4

1 に答える 1

1

この回答に基づいて、これは望ましい結果を返していると思います:

from collections import Counter

def change(amount):
    money = ()

    for coin in [200, 100, 50, 20, 10, 5, 1, 0.5]:
        num = int(amount/coin)
        money += (coin,) * num
        amount -= coin * num

    return Counter(money)

入出力:

>>> c = change(455.50)
>>> print c
Counter({200: 2, 0.5: 1, 50: 1, 5: 1})

編集:負の数を渡す必要がある場合は、-1を掛けて関数内に新しい変数を作成し、代わりに関数内で使用しますamount

于 2013-07-25T19:57:19.797 に答える