2015-12-13 5 views
-3

Я пытаюсь в конечном счете напечатать «доска», но консоль не будет пройти эту часть кода:TypeError: строковые индексы должны быть целыми числами?

board1=(" ") 
board2=(" ") 
board3=(" ") 
board4=(" ") 
board5=(" ") 
board6=(" ") 
board7=(" ") 
board8=(" ") 
board9=(" ") 



board= ((board1+" | "+board2+" | "+board3) 
["---------"] 
(board4+" | "+board5+" | "+board6) 
["---------"] 
(board7+" | "+board8+" | "+board9)) 

Он просто возвращает этот код ошибки. У кого-нибудь есть идеи?

Traceback (most recent call last): 
    File "C:\Users\Jaymeson\Desktop\Rock Paper Scissors CPU.py", line 36, in  <module> 
    ["---------"] 
TypeError: string indices must be integers 
>>> 

Я хотел бы выход быть:

| | 
--------- 
    | | 
--------- 
    | | 
+0

Что вы * ожидаете * '[" --------- "]' делать? – jonrsharpe

+0

Что вы ожидаете от '[" --------- "]' to * do * в этом выражении? Каков ожидаемый результат? –

+0

Обратите внимание, что вы можете сделать это намного проще с помощью списка символов 'boardN' и' str.format' или 'str.join'. – jonrsharpe

ответ

2

(board1+" | "+board2+" | "+board3) создает строку. Затем вы попросите Python проиндексировать эту строку с помощью string[...]. Строки могут принимать только целые числа (позиция отдельных символов). Вместо этого вы дали ему строку "---------".

Если вы хотите нарисовать линии между ячейками, не используйте [...] вокруг них. Просто конкатенации (и включают в себя символ новой строки):

board= ((board1+" | "+board2+" | "+board3) + 
     "\n---------\n" + 
     (board4+" | "+board5+" | "+board6) + 
     "\n---------\n" + 
     (board7+" | "+board8+" | "+board9)) 

Я хотел бы использовать вложенный список вместо этого, и сделать печать позже:

board = [[' ' for _ in range(3)] for _ in range(3)] 

def print_board(board): 
    print(*(' | '.join(row) for row in board), 
      sep='\n--+---+--\n') 

Теперь у вас есть матрица 3 х 3 в вложенных списках, и может изменять ячейки по мере необходимости:

>>> def print_board(board): 
...  print(*(' | '.join(row) for row in board), 
...   sep='\n--+---+--\n') 
... 
>>> board = [[' ' for _ in range(3)] for _ in range(3)] 
>>> print_board(board) 
    | | 
--+---+-- 
    | | 
--+---+-- 
    | | 
>>> board[0][0] = 'O' 
>>> board[1][1] = 'X' 
>>> print_board(board) 
O | | 
--+---+-- 
    | X | 
--+---+-- 
    | | 
Смежные вопросы