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.positionList
或 Food.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.positionList
和 Food.position
;你会发现它们不会是列表的列表(或者外部列表的至少一个元素将是 Int,而不是列表)。
(提示:Food.position
是一维的)
备注
您似乎在某种程度上滥用 classes 作为命名空间的一种方式,直接使用 class 而不是实例。这可能会在以后引起混淆。
您对 classes 的定义也不正确:在 Python 2 中,它将是
class Snake(object):
继承自object
。在 Python 3 中,它将是
class Snake:
不带括号,因为从 object
继承是隐式的(但是如果您需要 Python 2 兼容,Python 2 语法是有效和明智的)。
我正在与 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.positionList
或 Food.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.positionList
和 Food.position
;你会发现它们不会是列表的列表(或者外部列表的至少一个元素将是 Int,而不是列表)。
(提示:Food.position
是一维的)
备注
您似乎在某种程度上滥用 classes 作为命名空间的一种方式,直接使用 class 而不是实例。这可能会在以后引起混淆。
您对 classes 的定义也不正确:在 Python 2 中,它将是
class Snake(object):
继承自object
。在 Python 3 中,它将是
class Snake:
不带括号,因为从 object
继承是隐式的(但是如果您需要 Python 2 兼容,Python 2 语法是有效和明智的)。