2016-11-19 2 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 

Это производит TypeError:Unkown причина TypeError списков

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

Почему это, и как я могу остановить это от посылающей? Я понимаю, что 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's input ≙ Python 2's raw_input.

+0

Для интерпретатора нет ничего необычного * иногда *. Он имеет множество предопределенных правил. Он возвращает 'int' только тогда, когда введенное значение может быть введенным типом в' int' –

+1

@MoinuddinQuadri На _occasion_, что пользователь вводит что-то, что может быть введенным типом в 'int', оно возвращает' int'. – L3viathan

+0

Так говорит мой комментарий. Я думаю, вам следует иногда удалять ответ и упоминать правильную причину –

Смежные вопросы