2015-04-26 49 views
0

我試圖做一個程序,將返回正確的改變,在可能的最高面額如何創建函數,返回「在變革的最高面額」

即$ 73的返回1×50 $,1×$ 20 1×$ 2和$ 1 1

(我使用的100,$ 50,$ 20 $ 10 $ 5,$ 2,$ 1整數值)

我有一個長碼,工程...它是

hundred = x // 100 
hundred_remainder = x % 100 

fifty = hundred_remainder // 50 
fifty_remainder = hundred_remainder % 50 

twenty = fifty_remainder // 20 

e TC ....然後

if hundred > 0: 
    print (str(hundred) + " x $100") 
if fifty> 0: 
    print (str(fifty) + " x $50") 

等....工作正常,但我知道必須有書面形式,有一個循環用更少的打字去解決它的功能的一種方式。例如X = $ 345,然後得到3 x $ 100,從總數中減去它,並用餘數更新X,然後重複每個面額的過程,直到完成。我只是有點不確定如何弄清楚,任何指導將不勝感激!

回答

0

我認爲這個問題的涼爽模型定義,你認爲「合法」的前期值,然後再遍歷那些從頂部底部達到你的數量。考慮下面的循環:

#where x is the value from which you're making change 
    legal = [100,50,20,10,5,2,1,.50,.25,.10,.05,.01] 
    for dolAmount in legal: 
     count = x//dolAmount 
     if count > 0: 
      print int(count),\ 
        dolAmount,\ 
        " coin(s)" if dolAmount<1 else " dollar bill(s)" 
     x-=count*dolAmount 

    # prints lines like this for x=103.58: 
    # 
    # 1 100 dollar bill(s) 
    # 3 1 dollars bill(s) 
    # 1 0.5 coin(s) 
    # 1 0.05 coim(s) 
    # 3 0.01 coin(s) 
    # ehhh actually it will probably say 2 0.01 coin(s) because floating points.... 

格式化需要工作(到底是什麼0.5硬幣嗎?),但是這是爲自己節省了大量代碼編寫的一種巧妙的方法,並且該模式是適用於其他編程努力。一般來說,當你發現自己手工創建了很多變量/常量時,可能是開始考慮列表(或類似的集合)的時候了!

查看http://www.codeskulptor.org/#user39_ur6ybhs9HAmknOL.py瞭解實際情況(在函數中使用)的學習示例!快樂編碼!

+0

這是因爲0.01的浮點表示不準確而中斷。例如,您的版本因「11.76」而失敗。 – kanzure

0

幾周前我在C做了類似的事情;我不太瞭解Python,所以我只想寫出函數的邏輯。我確定你將能夠將它完美地翻譯成Python;)

我們知道最高的賬單是100美元;

因此,假設我們有335美元的金額。

我們應該首先做的是爲每個Bill面額創建一個int變量。

int b100 = 0; 
int b50 = 0; 
int b20 = 0; 
int b10 = 0; 
int b5 = 0; 
int b2 = 0; 
int b1 = 0; 

那麼,我們應該做一個while循環:

while(ammount >= 100){ 
    ammount = ammount - 100; 
    b100++; 
} 

這裏我們所做的事情是獲得的,我們還需要$ 100鈔票總ammount的。 在此循環之後,ammount必須等於35,並且b100的值應爲3;

隨後,我們重複的代碼與下期賬單:

while(ammount >= 50){ 
    ammount = ammount - 50; 
    b50++; 
} 

在這種情況下,作爲ammount的具有35的值,它是比50,它不會進入while循環;相反,它會傳遞到下一個:

while(ammount >= 20){ 
    ammount = ammount - 20; 
    b20++; 
} 

等....

所有這些之後田地,我們應該有ammount的與「0」的值;

而票據變量與所需的票據數量。

在335 $的變量值的例子應該是這樣的:

$ 100票據 - > 3張20 $紙幣 - > 1 $ 10項法案 - > 1 $ 5應收票據 - > 1

希望它的幫助下,任何懷疑隨意問;)

相關問題