我有一个python 2.7.6程序,我想转换为3.3.3。
我收到错误:
File "H:\My Game Python 3,3\MoonSurvival.py", line 199, in run
self.moon.levelStructure[x][y] = None
Traceback是:
Traceback (most recent call last):
File "H:\My Game Python 3,3\MoonSurvival.py", line 591, in <module>
Game().run()
File "H:\My Game Python 3,3\MoonSurvival.py", line 199, in run
self.moon.levelStructure[x][y] = None
TypeError: list indices must be integers, not float
但是当我查看levelStructure
的代码时,没有任何错误。这是指定levelStructure的代码:
tempBlock = Block(x*64, y*64)
# add block to both and self.levelStructure
self.levelStructure[x][y] = tempBlock
正如您所见,levelStructure
是tempBlock。由于它正在成倍增加,它似乎正在浮动。我知道除法它是两个斜杠/
。我试图乘以'*',但我仍然得到错误。我并不完全熟悉3.3.3语法,因为我通常使用2.7.6。
区号:
class Block(pygame.sprite.Sprite):
def __init__(self, x, y):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load('data/images/moon.jpg')
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
def render(self, surface):
surface.blit(self.image, self.rect)
导致此错误的原因是什么?
答案 0 :(得分:4)
因为您要从Python 2.7转换 - &gt; Python 3.x,它几乎只是地板划分的一个问题。
我不确定您在哪里生成x
和y
,但如果您在任何时候将这些数字除以任何数字,请确保使用//
运算符在Python 3中,如果你期望一个整数结果。
在Python 2中,5/2 == 2
并且您必须执行5/2.0
才能获得浮点结果。在Python 3中,5/2 == 2.5
并且您必须执行5//2
才能获得除法的整数结果。每当你在x
和y
上操作时,你可能会将它除以Python 2中给你一个整数的东西,但是在Python 3中你会留下这个浮点,所以您尝试将其用作列表索引... BOOM
答案 1 :(得分:0)
你传递一个浮点作为一个只接受整数的整数数组的索引。
如何在Python 3.3.3中尽可能简单地重现此错误:
>>> stuffi = []
>>> stuffi.append("foobar")
>>> print(stuffi[0])
foobar
>>> stuffi[0] = "failwhale"
>>> print(stuffi[0])
failwhale
>>> stuffi[0.99857] = "skipper"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not float
尝试将整数代码添加到变量中,以便:
self.levelStructure[x][y] = tempBlock
变为:
self.levelStructure[int(x])[int(y)] = tempBlock
如果可行,您可以将其添加到:
tempBlock = Block(x*64, y*64)
所以它看起来像:
tempBlock = Block(int(x*64), int(y*64))