2014-03-27 119 views
0

有人可以告诉我为什么board[x-1][y-1] == "x"没有执行?我已经有一段时间了。我得到的错误是:TypeError: 'str' does not support item assignment.我希望能够在玩家选择的行和列上放置“x”。用另一个值替换列和行

下面的代码:

import random 

board = [] 

for i in range(3): 
    board.append("|___|"*3) 
for row in board: 
    print row 

x = int(raw_input("x: ")) 
y = int(raw_input("y: ")) 

board[x-1][y-1] = "x" 

一个Codecademy网站的锻炼有相似的代码,如果没有相同的线,但我不知道为什么我的不能在这种情况下工作。

+0

好,板是1维列表,这不是” t包含两个维度? – Torxed

回答

1

您正在尝试编辑一个字符串。这是因为您初始化了1-D而不是2-D列表。

要初始化2-D列表,这样做如下:

for i in range(3): 
    board.append(["|___|"]*3) # Note the [] around the "|___|" 

当您打印板,它应该是这样的:

['|___|', '|___|', '|___|'] 
['|___|', '|___|', '|___|'] 
['|___|', '|___|', '|___|'] 

那么你的代码将正常工作

+0

你能解释一下[| | ___ |手段?一维和二维列表有什么区别? –

+0

@jasonadams,它意味着创建一个3'“| ___ |”'的列表,并且在你的代码中你执行这个命令3次以获得一个'3X3'板 – sshashank124

+0

@jasonadams,一个1-D列表是:[[1 ,2,3,4,5,6,7,8,9],而二维列表是:[[1,2,3],[4,5,6],[7,8,9 ]]'基本上在列表中列出。 – sshashank124

2
board[x-1][y-1] = "x" 

董事会是一个一维列表。看看这样说:

board[0] = "|___||___||___|" 

你想要什么大概是:

board[0] = ["|___|", "|___|", "|___|"] 

试试这个:

import random 

board = [] 

for i in range(3): 
    if len(board)-1 < i: board.append([]) 
    board[i] = [] 
    columns = board[i] 
    for colNum in range(3): 
     columns.append('|___|') 
    board[i] = columns 

for row in board: 
    print(row) 

x = int(raw_input("x: ")) 
y = int(raw_input("y: ")) 

board[x-1][y-1] = "| x |" 

# To verify the change: 
for row in board: 
    print(row) 
相关问题