我一直在尝试制作井字游戏,到目前为止,我只创建了一个应该打印出棋盘的功能:
board = [[1,2,3],[4,5,6],[7,8,9]]
def drawboard(board):
for row in board:
for item in row:
if type(board[row][item]) == "int":
print(str(board[row][item]))
print("|")
else:
print(board[row][item])
print("|")
print("\n")
print("------")
print("\n")
drawboard(board)
如您所见,我函数的一部分是检查列表内列表内元素的类型,但这给我一个错误:
回溯(最近通话最近):文件“ / Users / Tony / Desktop / coding Things / tic tac toe.py”,第22行,在 画板(画板)\文件“ / Users / Tony / Desktop / coding Things / tic tac toe.py”,第12行,在画板中 if type(board [row] [item])==“ list”:TypeError:列表索引必须是整数或切片,而不是列表
答案 0 :(得分:1)
在您的for循环中,row
和item
不是索引,您只需要检查item
的类型即可,您需要更改以下行:>
if type(board[row][item]) == "int":
到
if isinstance(item, int):
修复后:
def drawboard(board):
for row in board:
for item in row:
if isinstance(item, int):
print(str(item))
print("|")
else:
print(item)
print("|")
print("\n")
print("------")
print("\n")
答案 1 :(得分:1)
这里有一些问题:
type(..)
,您会不是获得字符串作为返回元素,而是获得对该类的引用。因此,您可以像这样解决此问题: board = [[1,2,3],[4,5,6],[7,8,9]]
def drawboard(board):
for row in board:
for item in row:
if type(item) == int:
print(str(item))
print("|")
else:
print(item)
print("|")
print("\n")
print("------")
print("\n")
drawboard(board)
由于非str
版通常在您调用打印时是str(..)
版,因此我们甚至可以将if
和else
分支合并为:
def drawboard(board):
for row in board:
for item in row:
print(item)
print("|")
print("\n")
print("------")
print("\n")
drawboard(board)
如果继续进行这种类型检查,通常检查类型相等性也不是一个好主意。由于如果元素是子类的,则类型不再为int
。然后,您最好使用isinstance(..)
。