2016-08-02 9 views
1

Ich versuche, die "Ergebnis" Variable in eine neue Liste namens total_winnings anhängen, aber ich bekomme einen Fehler.Anhängen einer Liste

Ich schaffte es erfolgreich für den total_stake tun, aber ich bekomme einen Fehler, wenn ich versuche, die gleiche Methode für total_winnings verwenden.

Ich denke, es ist, weil die "Ergebnis" Variable String-Eingabe nimmt?

while True: 

    add_selection =raw_input("Would you like to add a selection?") 
    if add_selection == "Yes": 

     selection = raw_input('Horse: ') 
     print selection 

     stake = float(raw_input('Stake: ')) 
     print stake 

     odds = float(raw_input('Odds: ')) 
     print odds 

     result = (raw_input('Result: ')) 
     if result == "Win": 
      print stake * odds 
     elif result == "Lose": 
      print 0 * odds 


     book = raw_input('Book: ') 
     print book 

     my_list=[selection,stake,odds,result,book] 

     inputs.append(my_list) 

     total_stake=[] 
     for my_list in inputs: 
      total_stake.append(my_list[1]) 
     print sum(total_stake) 

     total_winnings = [] 
     for my_list in inputs: 
      total_winnings.append(my_list[3]) 
     print sum(total_winnings) 

     def looks_good(inputs): 
      for i in inputs:  
       print i      

    elif add_selection == "No": 
     break 

    looks_good(inputs) 

Jede Hilfe würde sehr geschätzt werden.

+0

Bitte fügen vollständigen Code führen 'inputs' initailization und' looks_good' –

+1

"aber ich bekomme einen Fehler" Und ... der Fehler ist ein Geheimnis? :-) – smarx

+0

Meine Vermutung ist, dass der Fehler in der Zeile 'print sum (total_winnings) 'ist und dass es das Problem ist, dass Ihre Liste Strings drin statt Ganzzahlen enthält. – smarx

Antwort

0

Meine_Liste [3] enthält entweder Win of Lose, d. H. Ein String-Wert und das Summieren darüber wird nicht funktionieren. Sie können so etwas wie dieses

result = (raw_input('Result: ')) 
    result_val = stake*odds 
    if result == "Win": 
     print result_val 
    elif result == "Lose": 
     print 0 

tun Und während zu my_list Hinzufügen, fügen Sie einfach die result_val statt Ergebnis oder zusätzlich einschließlich

my_list=[selection,stake,odds,result_val,book] 
+0

Ja gibt es einen Unterschied mit dem einen über Sie haben nur das Ergebnis_val über das if und post1 hat es nach dem if Es funktioniert auf jeden Fall, danke! – JJBridger

+0

@JJBridger Ja, es gibt, mein Code aktualisiert Ihre result_val als Einsatz * Quoten für jeden Wert des Ergebnisses, d. H. Gewinnen oder verlieren, weil es nicht innerhalb der Bedingungen ist. Während der folgende Code update_val als Einsatz * für Gewinn und 0 für Verlust aktualisiert. – Prasanna

0

Der Fehler, den Sie erhalten, ist

TypeError: unsupported operand type(s) for +: 'int' and 'str'

Das Problem ist, dass Sie zur Zeit Strings werden zu speichern "Win" und "Lose" in my_list[3] während Sie meinen stake * odds zu speichern. Wenn Sie die Funktion sum(my_list[3]) ausführen, wird ein Fehler ausgegeben, da Strings nicht zusammengefasst werden können.

den Fehler zu beheben, die von if else Anweisung ändern:

if result == "Win": 
    print stake * odds 
elif result == "Lose": 
    print 0 * odds 

zu:

if result == "Win": 
    print stake * odds 
    result = stake * odds 
elif result == "Lose": 
    print 0 * odds 
    result = 0 
+0

Mein fehler war int und unicode. Ja, diese Lösung funktioniert super, danke! – JJBridger

0
result = (raw_input('Result: ')) 

result ist ein str (ein String).

my_list=[selection,stake,odds,result,book] 
... 
for my_list in inputs: 
    total_winnings.append(my_list[3]) 

my_list[3] ist result, was ein str ist. Wenn Sie total_winnings ausdrucken, werden Sie etwas wie ["Win", "Lose", "Lose"] sehen.

print sum(total_winnings) 

Jetzt versuchen Sie sum diese Zeichenfolgen. Dies macht keinen Sinn, und vermutlich gibt es Ihnen diese Fehlermeldung:

TypeError: unsupported operand type(s) for +: 'int' and 'str' 

Ich glaube, Sie, so etwas zu tun bedeuten:

result = (raw_input('Result: ')) 
if result == "Win": 
    result = stake * odds 
elif result == "Lose": 
    result = 0 
+0

Sehr gut erklärt danke – JJBridger

0

ich einige Probleme mit Ihrem Code sehen kann.

Erstens, eine Funktion ("def sieht_gute (Eingänge)") innerhalb einer Schleife ist keine gute Idee. Wenn Sie nicht versuchen, etwas relativ schwierig zu tun, sollten die Funktionsdefinitionen auf der obersten Ebene Ihres Codes sein, bevor andere Sachen.

Zweitens wird die Variable mit dem Namen "Eingänge" in "Eingängen.append (my_list)" verwendet, bevor es überall definiert ist.

Da Sie die gleichen Namen verwenden („Eingänge“) in als Argument für die looks_good() Funktion, Sie eine Situation der Einrichtung ist, wo es zwei verschiedene „Eingänge“ Variablen - ein Innen der Funktion und eine außerhalb - das ist fast sicherlich eine schlechte Idee. Die Verwendung unterschiedlicher Namen für diese verschiedenen Variablenbereiche kann hilfreich sein.

Fix diese Probleme zuerst, und dann sehen, ob Ihre Fehlermeldung ist klarer. Wenn es immer noch nicht funktioniert, würde ich vorschlagen, viele "print" Anweisungen zu setzen, um genau zu sehen, was vor sich geht.

+0

Sorry, ich habe nicht die richtigen Code-Eingaben ist eine leere Liste vor der Schleife – JJBridger