我是一个Python新手,但我不明白为什么这个不能工作。我所要做的就是输出一个包含两个值[1,2,3,4]的2d列表。我花了一个上午的大部分时间试图弄清楚这一点,所以我只是想寻求帮助。
class Tiling:
def __init__(self, width, height, tileSize):
self._width = width
self._height = height
self._tileSize = tileSize
self._numTiles = (width / tileSize) * (height / tileSize)
self._positions = []
def tileMap(self):
i = 0
yCounter = 0
x = []
y = []
for j in range(0, self._width, 32):
x.append(j)
for k in range(0, self._height, 32):
y.append(k)
while len(self._positions) < (self._numTiles):
self._positions.append([x[i], y[yCounter]])
if self._positions[i][0] == self._width:
i = 0
yCounter = yCounter + 1
if i < len(x):
i = i + 1
return self._positions
tileObject = Tiling(800, 608, 32)
test = tileObject.tileMap()
print(test)回溯是:
Traceback (most recent call last):
File "C:\Users\gaming only\Desktop\PyMap\tiling.py", line 30, in <module>
test = tileObject.tileMap()
File "C:\Users\gaming only\Desktop\PyMap\tiling.py", line 19, in tileMap
self._positions.append([x[i], y[yCounter]])
IndexError: list index out of range发布于 2014-02-03 02:17:43
如果发布的代码是准确的,那么只有一项被放入y中(附加到y的行不在循环中)。
发布于 2014-02-03 02:58:43
如果我们有一个包含n项的列表,则该列表的len函数将返回n。
但是由于列表的索引,从zero开始,如果我们想循环遍历它,我们必须循环到n-1。
因此,更改这一行:
if i < len(x):
i = i + 1至:
if i < len(x) - 1:
i = i + 1现在你的代码可以运行了:
[[0, 0], [32, 0], [64, 0], [96, 0], [128, 0], ....发布于 2014-02-03 03:20:01
我认为你想要这样的东西:
def tileMap(self):
self._positions = [ (x, y)
for y in range(0, self._height, self._tileSize)
for x in range(0, self._width, self._tileSize) ]
return self._positionshttps://stackoverflow.com/questions/21514217
复制相似问题