Python制作TicTacToe时列表多索引访问报TypeError怎么解决?
报错原因
你标注的报错行中使用的X_Used_Cords[0,3,6]、Available_Cords[0,3,6]写法不符合Python列表的索引规则:
Python普通列表的方括号索引仅接受整数、切片两种类型的参数,你在方括号内写多个逗号分隔的数值时,Python会自动将其识别为一个元组传入作为索引,因此触发了TypeError: list indices must be integers or slices, not tuple的报错。
修复方法
如果要对比索引0、3、6位置的元素是否匹配,手动取出对应索引的元素组成新列表再做对比即可,将报错行替换为以下代码:
if [X_Used_Cords[0], X_Used_Cords[3], X_Used_Cords[6]] == [Available_Cords[0], Available_Cords[3], Available_Cords[6]]:
后续要判断其他列、对角线的获胜情况也可以用同样的写法,比如第二列对应[1,4,7]、对角线对应[0,4,8]/[2,4,6]。
其他可优化的问题
- O方落子逻辑中你误写了
del X_Used_Cords[User_Input],会错误删除X的落子记录,需要改成del Y_Used_Cords[User_Input] - 代码末尾重复定义了
wn = trtl.Screen(),可以删除多余的定义 - 可以预先把所有获胜的索引组合存在一个列表里,循环判断胜负,避免写大量重复的if语句:
win_combinations = [[0,1,2], [3,4,5], [6,7,8], [0,3,6], [1,4,7], [2,5,8], [0,4,8], [2,4,6]] for combo in win_combinations: if [X_Used_Cords[i] for i in combo] == [Available_Cords[i] for i in combo]: print("Congratulations, you won :)") wn.mainloop()
内容的提问来源于stack exchange,提问作者Ewok
相关产品推荐
相关产品推荐

