2017-03-25 2 views
0

Also ich möchte alle Werte zusammen zählen, um eine totalItems var, die unter der Liste gedruckt wird. Die Ausgabe gibt mir 5 statt alles gegen oben zu sein. Kann mir jemand erklären warum, nicht nur den richtigen Code geben.Python Count Gesamtzahl Elemente im Wörterbuch

stuff = {'coins': 5, 'arrows': 42, 'rope': 1} 


def getInvent(inventory): 

    itemTotal = 0 
    print('Inventory:') 
    print(str(stuff['coins']) + ' Coins') 
    print(str(stuff['arrows']) + ' Arrows') 
    print(str(stuff['rope']) + ' Rope') 

    for k, v in stuff.items(): 
     itemTotal = itemTotal + v 
     print('Total number of items: ' + str(itemTotal)) 
     return itemTotal 

getInvent(stuff) 
+0

Haben Sie den Code gelesen und befolgt, was es tut? –

+0

Es gibt Einrückungsprobleme mit Ihrem Code. 'return itemTotal' befindet sich innerhalb der for-Schleife und daher wird nach der ersten Iteration' 5' zurückgegeben und Rest wird nicht gezählt. Ein einfacherer Code wäre - 'sum (stuff.values ​​())'. –

Antwort

1

Sie soll nicht return in Ihrer Schleife, weil in diesem Fall sofort zurückkehrt (in der ersten Iteration der Schleife). Setzen Sie die Rückgabe stattdessen außerhalb der Schleife.

for k, v in stuff.items(): 
    itemTotal = itemTotal + v 
    print('Total number of items: ' + str(itemTotal)) 
return itemTotal 

Eine Funktion wird sofort zurück, wenn er die return Aussage trifft. Sie sollten also sicherstellen, dass Ihre Schleife vollständig ausgeführt wird, bevor Sie den Wert zurückgeben.

+0

Ich habe es nicht einmal bemerkt! Ich danke dir sehr. Genau das habe ich gesucht! – Mees

2

Sie können die Wende für Schleife in einen Einzeiler mit sum() und dict.values():

>>> sum(stuff.values()) 
48 

Erläuterung:

stuff.values() gibt Ihnen eine Liste aller Werte im Wörterbuch:

sum() addiert zusammen al l Artikel in einer abzählbaren (wie eine Liste):

>>> sum([1, 5, 42]) 
48 

Voll Beispiel:

stuff = {'coins': 5, 'arrows': 42, 'rope': 1} 

def getInvent(inventory): 
    print('Inventory:') 
    print(str(stuff['coins']) + ' Coins') 
    print(str(stuff['arrows']) + ' Arrows') 
    print(str(stuff['rope']) + ' Rope') 

    itemTotal = sum(inventory.values()) 
    print('Total number of items: ' + str(itemTotal)) 
    return itemTotal 

getInvent(stuff) 
+0

Julien schlug mich einfach, Summe der Liste der Werte ist der einfachste Weg, dies in einer einzigen lesbaren Codezeile zu tun –

+0

Vielen Dank, und ich sah etwas über sum() auf stackoverflow, aber die Sache ist, ich bin folgenden Regeln eines Buches. Die Regeln sollten nicht sum() verwenden, da ich das noch nicht lernen konnte. – Mees

Verwandte Themen