【问题标题】:one list object does not support indexing, but the other one does?一个列表对象不支持索引,但另一个呢?
【发布时间】:2017-08-01 22:29:00
【问题描述】:

我是 Stack Overflow 的新手,我正在用 python 编写这个程序,它应该创建两个不同的游戏板对象:一个小的和一个大的。两个游戏板对象都是由列表组成的,因此我以后可以通过索引访问板上的特定空间。较大的一块板没有任何明显的错误,但是当我创建小板对象并尝试通过索引访问它们的特定空间时,我得到错误“对象不支持索引”。我真的很困惑,因为它与大板一起工作,我已经阅读了很多关于这个错误的其他帖子,但他们似乎都发现对象不是实际列表中的错误。但是我在构造函数中定义它应该是一个列表。希望大家帮忙!

这是类的代码:

import copy

SMALL_BOARD = [ #one list for small board
      None, None, None,
      None, None, None,
      None, None, None,
]

BIG_BOARD = [ #one big list for big board
     None, None, None, None, None, None,
     None, None, None, None, None, None,
     None, None, None, None, None, None,
     None, None, None, None, None, None,
     None, None, None, None, None, None,
     None, None, None, None, None, None,
 ]

class SMALLBoard():
      def __init__(self, board=None):
          if board is None:
              board = copy.deepcopy(SMALL_BOARD)
          self.sboard = board

class BIGBoard():
    def __init__(self, bboard=None):
        if bboard is None:
            bboard = copy.deepcopy(BIG_BOARD)
        self.bboard = bboard 

    def equal_small_boards(self, boardA, boardB, boardC, boardD):
        tempboard=BIGBoard()
        tempboard[0]= boardA[0]
        tempboard[3]= boardB[0]
        tempboard[18]= boardC[0]
        tempboard[21]= boardD[0]

        return tempboard

当我运行以下代码时出现错误:'in equal_small_boards tempboard[0]=boardA[0] TypeError: 'SMALLBoard' 对象不支持索引'

 bboard = BIGBoard()
sboardA = SMALLBoard()
sboardB = SMALLBoard()
sboardC = SMALLBoard()
sboardD = SMALLBoard()

bboard=bboard.equal_small_boards(sboardA, sboardB, sboardC, sboardD)

提前感谢您的回答! :)

【问题讨论】:

  • tempboard 是一个BIGBoard,而BIGBoards 不支持索引。

标签: python list object indexing


【解决方案1】:

问题出在你的方法上:

def equal_small_boards(self, boardA, boardB, boardC, boardD):
    tempboard=BIGBoard()
    tempboard[0]= boardA[0]
    tempboard[3]= boardB[0]
    tempboard[18]= boardC[0]
    tempboard[21]= boardD[0]

    return tempboard

tempboardBIGBoard,而BIGBoard 不支持索引。您可能想写入其bboard 字段。所以:

def equal_small_boards(self, boardA, boardB, boardC, boardD):
    tempboard = BIGBoard()
    tempboard.bboard[0] = boardA[0]
    tempboard.bboard[3] = boardB[0]
    tempboard.bboard[18] = boardC[0]
    tempboard.bboard[21] = boardD[0]

    return tempboard

应该可以。

【讨论】:

  • 谢谢!它现在可以工作了,尽管我还需要为 boardA、boardB、boardC 和 boardD 添加特定字段以使程序正常运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-28
  • 1970-01-01
  • 2013-10-05
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
相关资源
最近更新 更多