Python Type error: Int not subscriptable

Python Type error: Int not subscriptable

我正在与 pygame 合作,尝试制作贪吃蛇游戏。当蛇有 "eaten"(在上面)食物时,我无法让我的代码意识到。

我已经在 class 中设置了我的蛇以及食物。

class Snake():
    def draw():
        for k in Snake.positionList:
        pygame.draw.rect(gameDisplay, BLACK, [k[0], k[1], block_size,  block_size])
    positionList = []
    length = 1
    direction = 0

class Food():
    position = [round(random.randrange(0, display_width - block_size), -1), round(random.randrange(0, display_height - block_size), -1)]
    def draw():
        pygame.draw.rect(gameDisplay, GREEN, [Food.position[0], Food.position[1], block_size, block_size])

我的snake第一个"square"定义如下。结果是浮点数。

Snake.positionList.append([display_width / 2, display_height / 2])

我检测蛇是否越过食物的函数是导致错误的代码行TypeError: 'int' object is not subscriptable

def isEating(Snake, Food):
    if Snake.positionList[0][0] == Food.position[0][0] and Snake.positionList[0][1] == Food.position[0][1]:
        return True
    else:
        return False

我的困惑如下:Snake.positionListFood.position 都没有将数字存储为整数(大概是浮点数??)。此外,IDLE 中的一段类似代码没有给我任何错误。

someList = [[2.5,5.7],[5.8,5.1],[1.0,2.5]]
print(someList[0][0] == someList[2][1])
#prints True

所以总结一下...我的错误是什么意思(尤其是 'subscriptable' 项),为什么当 none 的元素是整数时会出现错误?

Subscriptable 表示框上的内容:您可以对其应用 [0] 等下标。请注意,这与 IndexError 不同,在 IndexError 中您的索引将超出范围(例如,在 [1,2,3][4] 的情况下)。

你应该打印 Snake.positionListFood.position;你会发现它们不会是列表的列表(或者外部列表的至少一个元素将是 Int,而不是列表)。

(提示:Food.position 是一维的)

备注

您似乎在某种程度上滥用 classes 作为命名空间的一种方式,直接使用 class 而不是实例。这可能会在以后引起混淆。

您对 classes 的定义也不正确:在 Python 2 中,它将是

class Snake(object):

继承自object。在 Python 3 中,它将是

class Snake:

不带括号,因为从 object 继承是隐式的(但是如果您需要 Python 2 兼容,Python 2 语法是有效和明智的)。