2016-11-19 80 views
1
def player_move(Player, board): 
    playerMarker = None 
    print("Player ",Player," it is your turn!") 
    playerChoice = input("Please input your move: ") 
    if Player == 1: 
     playerMarker == 9 
    else: 
     playerMarker == 10 
    board[playerChoice] == playerMarker 

這會產生類型錯誤:不明原因類型錯誤的列表

line 36, in player_move 
board[playerChoice] == playerMarker 
TypeError: list indices must be integers or slices, not str 

這是爲什麼,我怎麼能阻止這種從occouring?我明白str不能添加到這個列表中,但是我不是試圖添加整數嗎?

+1

'input()'返回的值是'str'類型。你需要將它轉換爲'int'來將其轉換爲有效的索引。此外,字符串應該保存有效的整數值。 –

回答

1

存在兩個問題:您假定playerChoice是一個整數(它是一個字符串,必須使用int()。*進行轉換),並且您正在使用==進行分配。這裏是它的固定:

def player_move(Player, board): 
    playerMarker = None 
    print("Player ",Player," it is your turn!") 
    # should probably check for invalid inputs here 
    playerChoice = int(input("Please input your move: ")) 
    if Player == 1: 
     playerMarker = 9 
    else: 
     playerMarker = 10 
    board[playerChoice] = playerMarker 

*您可能會搞不清楚是否來自Python 2中,其中input確實(偶爾)返回一個整數。 Python 3的input≙Python 2的raw_input

+0

解釋器沒有*偶爾*。它有一套預定義的規則。只有當輸入的值可以類型轉換爲int時,它才返回'int'。 –

+1

@MoinuddinQuadri在用戶輸入可以類型轉換爲int的_occasion_時,它返回int。 – L3viathan

+0

我的評論如此說。我認爲你應該偶爾從答案中刪除,並提出正確的理由 –