我一直在尝试制作一个井字游戏,到目前为止,我只创建了一个应该打印出来的功能:
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)
正如您所看到的,我的函数的一部分是检查列表中列表内部元素的类型,但它给了我一个错误:
Traceback(最近一次调用最后一次):文件“/ Users / Tony / Desktop / coding things / tic tac toe.py”,第22行,在drawboard(board)\ File“/ Users / Tony / Desktop / coding things / tic tac toe.py“,第12行,在drawboard中如果type(board [row] [item])==”list“:TypeError:list indices必须是整数或切片,而不是list
2 回答
在你的for循环中,
row
和item
不是索引,你只需要检查item
的类型,为此你需要更改这一行:至
修复后:
这里有一些问题:
如果迭代列表,则迭代列表的元素,而不是索引;和
如果查询
type(..)
,则不会将字符串作为返回元素,而是对类的引用 . 所以你可以解决这个问题:由于非
str
项目通常是str(..)
-ed,当您对它们调用print时,我们甚至可以将if
和else
分支合并为:如果你继续这个类型检查,通常检查类型相等也不是一个好主意 . 因为如果元素是子类,则类型不再是
int
. 然后你最好使用isinstance(..)
.