You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:06:04