2015-11-19 51 views
0
def RPS(): 
    userRPS = input("Rock, paper, or scissors? ") 
    RPSlist = ["rock", "paper", "scissors"] 
    computerRPS = RPSlist[randint(1,3)] 
    print("\nI chose " + computerRPS + ", and you chose " + userRPS) 
    elif userRPS == "scissors": 
     if computerRPS == "rock": 
      print("You lose.") 
     elif computerRPS == "paper": 
      print("You win.") 
     elif computerRPS == "scissors": 
      print("I chose scissors too. Go again.") 
      RPS() 
    else: 
     print("?") 
     RPS() 

所以,如果我讓else語句運行,它會打印出列表索引超出範圍。如果用戶和隨機生成器選擇相同的事情,也會發生同樣的情況。我試圖學習如何解決這個問題,但我真的不明白任何解釋。Python:列表索引超出範圍。我不知道如何解決這個問題

+0

您能否添加錯誤信息的完整副本?錯誤信息應該告訴你我們應該深入研究哪些線...... – albert

+1

此外,這段代碼有語法錯誤...它不會運行。第一個「elif」應該是「if」 –

+1

將'randint(1,3)'改爲'randint(0,2)';提醒列表是零索引,所以大小爲3的列表有索引0-2 –

回答

0

一些改動:

elif userRPS == "scissors": 

應該

if userRPS == "scissors": 

而且

computerRPS = RPSlist[randint(1,3)] 

應該

computerRPS = RPSlist[randint(0,2)] 

請務必記住,列表索引的計數來自0,而不是1

1

你應該做randint(0,2),因爲RPSList是零索引。這修正了超出範圍的錯誤,但你也應該做「if ... else」而不是「elif ... else」。

+0

生病給了你一個新手點,我告訴你, – repzero

+0

謝謝。對於語法錯誤感到抱歉。我不想包含不必要的代碼。這是我的最後一個陳述。所以我忘了刪除「el」 – Daniel

0

更好的方法來做你想做的事就是使用random.choice

例如

import random 

RPSlist = ["rock", "paper", "scissors"] 
print(random.choice(RPSlist)) 

這樣您就不必關心列表的長度。

所以該行成爲

computerRPS = random.choice(RPSlist) 

你也不能有elif沒有前if。所以你只需要將elif更改爲if即可。

0

關於你的問題

我真不明白,任何的解釋您的這個部分。

編輯之前,你問你編輯你的新命令

computerRPS = RPSlist[randint(1,3)] 

雙方將導致列表索引找出原因的範圍後,有

computerRPS = RPSlist[randint(0,3)] 

現在呢?

就拿computerRPS = RPSlist[randint(1,3)]

可以產生

RPSlist[1] 
RPSlist[2] 
RPSlist[3] 

但你的RPSlist從0

RPSlist = ["rock", "paper", "scissors"] 
      ^ ^  ^
      0  1   2 

開始,如果現在randint(1,3)給你一個隨機數三個要素像。你的變量將是

RPSlist[3] 

但你陣列不具有任何可變用3.最大索引的元素的索引是2

因此你得到一個索引超出範圍錯誤