2009-03-07 18 views
-2

Bir satın alma tutarından bir değişim tutarı (Çeyrekler, keseler, nikel ve pennies) hesaplamanın en etkili yolunu arıyorum. Satın alma tutarı 1 ABD Dolarından az olmalı ve değişim 1 dolar. Birinin ne kadar çeyrek, çukur, nikel ve pennies geri alacağını bilmem gerek.Python işlevi: Satın alma miktarını değiştirin

Sözlük kurmak en iyisi olur mu?

+0

Ödev soru etiketlenmiş başka çözüm? – alexpopescu

+0

Evet, bu bir ev ödevi problemidir, ama bulmaya çalıştığım şey en etkili yöntemdir. Herkesin özyineleme yöntemi için oy kullandığı görünüyor, anladığım kadarıyla bir döngü yönteminden çok daha fazla süreç aç. –

+0

Süreç açıldı? Sadece kaç para mezhepiyle çalışıyorsun? –

cevap

0

En iyi bahsiniz, büyük olasılıkla sıralanmış bir madeni para boyutu sözlüğüne sahip olmanız ve ardından değişimin değerden büyük olup olmadığını kontrol etmek, bu parayı ekleyip değerin çıkarılmasını kontrol etmektir, aksi halde, bir sonraki satırdaki sonraki satıra geçin. sözlük.

Ör

Coins = [50, 25, 10, 5, 2, 1] 
ChangeDue = 87 
CoinsReturned = [] 
For I in coins: 
    While I >= ChangeDue: 
     CoinsReturned.add(I) 
     ChangeDue = ChangeDue - I 

orada benim berbat piton sözdizimi affedin. Umarım devam etmek yeterlidir.

+0

, i> = changeDue – Triptych

+0

olmalıdır, bu yüzden olmalıdır. Bu Triptych için teşekkürler –

+0

Ayrıca bir listeye .add yoktur. CoinsReturned.append (i) –

7

Öyle mi demek istediniz, bu programlama programındaki 2b problemi değil mi? Eh, muhtemelen değil, insanlara artık nasıl değişiklik yapabileceklerini öğretmiyorlar. (Ya da belki de yaparlar: bu bir ev ödevi mi?)

Eğer 50 yaşın üzerinde birisini bulursanız ve sizin için değişiklik yaptıysanız, bu şekilde çalışır. 3.52 dolarlık bir çek aldığını ve kasiyere bir twnty vereceğini söyle. Onlar (3,55)

  • geri sayım 2 Paranın, (3.60, 3.65)
  • "üç dört, beş" diyerek geri

    • sayım üç peni ardından "üç elli iki" diyerek değişiklik yapacağız geri
    • sayımı on sent (3,75)
    • çeyrek (4 dolar)
    • bir dolar bill (beş dolar)
    • 5 $ fatura (on dolar)
    • 10 $ fatura (yirmi).

    Bu, özyinelemeli bir süreçtir: mevcut değeri artı bir sonraki adlandırma bile ortaya çıkana kadar geçerli değeri geri sayarsınız. Ardından sonraki adıma geçin.

    Tabii ki yukarıdaki gibi yinelemeli olarak yapabilirsiniz.

    4

    Bu oldukça hızlı muhtemelen - bahis başına sadece birkaç operasyonları:

    def change(amount): 
        money =() 
        for coin in [25,10,5,1] 
         num = amount/coin 
         money += (coin,) * num 
         amount -= coin * num 
    
        return money 
    
    0

    Bu sorun sayılar teorisi gelen tamsayı bölümleri ile oldukça kolay çözülebilir. Bir sayı ve bir bölüm listesi alan ve verilen sayıyı oluşturabilecek olası kombinasyonların sayısını döndüren bir özyinelemeli işlev yazdım.

    http://sandboxrichard.blogspot.com/2009/03/integer-partitions-and-wiki-smarts.html

    İstediğin değil tam olarak ne, ama kolayca sonuç almak için değiştirilmiş olabilir.

    +0

    olacaktır, OP'nin ne aradığını tam olarak anlamayacaktır: bağlantı 404'tür. –

    0

    Yukarıdaki solo çalışması çalışıyor.

    amount=int(input("Please enter amount in pence")) 
    coins = [50, 25, 10, 5, 2, 1] 
    coinsReturned = [] 
    for i in coins: 
        while amount >=i: 
         coinsReturned.append(i) 
         amount = amount - i 
    print(coinsReturned) 
    

    Alternatif olarak, zemin ve mod işlevlerini kullanarak bir çözüme erişebilirsiniz.

    amount = int(input("Please enter amount in pence")) 
    # math floor of 50 
    fifty = amount // 50 
    # mod of 50 and floor of 20 
    twenty = amount % 50 // 20 
    # mod of 50 and 20 and floor of 10 
    ten = amount % 50 % 20 // 10 
    # mod of 50 , 20 and 10 and floor of 5 
    five = amount % 50 % 20 % 10 // 5 
    # mod of 50 , 20 , 10 and 5 and floor of 2 
    two = amount % 50 % 20 % 10 % 5 // 2 
    # mod of 50 , 20 , 10 , 5 and 2 and floor of 1 
    one = amount % 50 % 20 % 10 % 5 % 2 //1 
    
    print("50p>>> " , fifty , " 20p>>> " , twenty , " 10p>>> " , ten , " 5p>>> " , five , " 2p>>> " , two , " 1p>>> " , one) 
    

    Ya

    amount=int(input("Please enter the change to be given")) 
    endAmount=amount 
    
    coins=[50,25,10,5,2,1] 
    listOfCoins=["fifty" ,"twenty five", "ten", "five", "two" , "one"] 
    change = [] 
    
    for coin in coins: 
        holdingAmount=amount 
        amount=amount//coin 
        change.append(amount) 
        amount=holdingAmount%coin 
    
    print("The minimum coinage to return from " ,endAmount, "p is as follows") 
    for i in range(len(coins)): 
        print("There's " , change[i] ,"....", listOfCoins[i] , "pence pieces in your change") 
    
    İlgili konular