如何解决Python十五拼图程序TypeError: 'set' object is not subscriptable报错
问题原因
你代码的报错根源出在Tablero.py的__init__方法里,你把空白格的坐标esp_vacio定义成了集合(set)类型:
self.esp_vacio = {MAX_FIL - 1, MAX_COL - 1}
Python里的集合是无序且不支持下标索引的,你后续在mover方法里用esp_vacio[0]、esp_vacio[1]去取横纵坐标的操作,对集合类型是非法的,所以会抛出TypeError: 'set' object is not subscriptable的报错。
修复方法
只需要把esp_vacio的初始化代码改成用列表(方括号)即可:
# 把原来的大括号{}改成方括号[] self.esp_vacio = [MAX_FIL - 1, MAX_COL - 1]
修改后再运行代码,按上方向键的逻辑就能正常执行了。
额外优化建议
- 你当前的
__repr__方法内部直接做了打印,不符合Python魔法方法的规范,建议把打印逻辑移到其他方法,__repr__只返回格式化好的棋盘字符串,避免后续调用print(t)的时候出现重复打印的问题。 - 其他方向键的移动逻辑可以直接复用已经写好的
mover_xxxx方法,不用单独写打印语句。
内容的提问来源于stack exchange,提问作者ivanTenryu
相关产品推荐
相关产品推荐

