2016-08-02 206 views
1

我想追加「結果」變量到一個名爲total_winnings的新列表中,但我得到一個錯誤。追加列表

我設法成功完成total_stake,但當我嘗試使用total_winnings的相同方法時出現錯誤。

我認爲這是因爲「結果」變量需要字符串輸入?

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) 

任何幫助將不勝感激。

+0

請添加完整的代碼,包括'inputs' initailization和'looks_good' –

+1

「但我得到一個錯誤」並且...錯誤是一個祕密? :-) – smarx

+0

我的猜測是這個錯誤在'print sum(total_winnings)'這一行,它告訴你問題是你的列表中有字符串而不是整數。 – smarx

回答

0

my_list [3]包含Win of Lose即一個字符串值並且將其合計將不起作用。你可以做這樣的事情

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

雖然增加my_list,只需添加的,而不是結果result_val或除了導致

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

是的,是否有任何與上面的一個不同的想法,你剛纔把result_val放在if和post1之後的if ,它可以工作,謝謝! – JJBridger

+0

@JJBridger是的,我的代碼更新您的result_val作爲賭注*賠率任何值的結果,即輸贏,因爲它不在條件之內。 而下面的代碼更新result_val作爲賭注*贏的賠率和丟失的0。 – Prasanna

0

你得到的錯誤是

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

的問題是,你正在存儲串"Win"my_list[3]"Lose",而你的意思是存儲stake * odds。當你執行函數sum(my_list[3])時,它會給出一個錯誤,因爲它不能對字符串進行求和。

要修正這個錯誤,更改從if else聲明:

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

到:

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

我的錯誤是int和unicode。是的,這個解決方案非常感謝! – JJBridger

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

resultstr(字符串)。

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

my_list[3]result,這是一個str。如果你打印出total_winnings,我想你會看到類似["Win", "Lose", "Lose"]的東西。

print sum(total_winnings) 

現在您正在嘗試sum這些字符串。這是沒有意義的,想必它給你這個錯誤:

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

我想你的意思是做這樣的事情:

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

非常好解釋謝謝 – JJBridger

0

我可以看到幾個問題與您的代碼。首先,定義函數(「def looks_good(inputs)」) 並不是一個好主意。除非您嘗試使用 來做相對棘手的事情,否則函數定義 應該位於您的代碼的頂層,在 之前。第二,名爲「輸入」的變量在 「inputs.append(my_list)」中被使用,然後在任何地方被定義爲 。

既然你在 使用相同的名稱(「輸入」)作爲looks_good()函數的參數, 您設置那裏有 兩個不同的「輸入」變量的情況 - 一個內部 的功能和一個外部 - 這幾乎是 當然是一個壞主意。對這些不同的變量作用域使用不同名稱 可能會有所幫助。

先解決這些問題,然後看看您的 錯誤消息是否更清晰。如果它仍然不是 的工作,我會建議大量的「打印」 聲明,看看究竟是怎麼回事。

+0

對不起,我沒有發佈正確的代碼輸入是循環前的空列表 – JJBridger