循环不完全迭代

时间:2013-04-04 22:05:05

标签: python

我正在创建一个简单的RPG作为学习体验。在我的代码中,我有一个显示在25x25网格上的瓷砖数组,以及一个单独的数组,其中包含与瓷砖是否为实体有关的真/假值。后者不起作用;在我的下面的代码中,我已经将打印声明准确地放在了未达到的位置,并且我不太确定问题是什么。

此外,该级别的数据只是一个文本文件,其网格为25x25个字符,代表块。

def loadLevel(self, level):
    fyle = open("levels/" + level,'r')
    count = 0
    for lyne in fyle:
        if lyne.startswith("|"):
            dirs = lyne.split('|')
            self.north = dirs[1]
            self.south = dirs[2]
            self.east = dirs[3]
            self.west = dirs[4]
            continue

        for t in range(25):
            tempTile = Tiles.Tile()
            tempTile.value = lyne[t]
            tempTile.x = t
            tempTile.y = count
            self.levelData.append(tempTile)
        count += 1

    rowcount = 0
    colcount = 0

    for rows in fyle:
        print('Doesnt get here!')
        for col in rows:
            if col == 2:
                self.collisionLayer[rowcount][colcount] = False
            else:
                self.collisionLayer[rowcount][colcount] = True
            colcount += 1
            print(self.collisionLayer[rowcount[colcount]])
        if rows == 2:
            self.collisionLayer[rowcount][colcount] = False
        else:
            self.collisionLayer[rowcount][colcount] = True
        rowcount += 1

    print(self.collisionLayer)

问题究竟在哪里?我觉得好像是快速修复,但我根本没有看到它。谢谢!

3 个答案:

答案 0 :(得分:5)

您使用第一个for循环读取文件一次,因此没有任何内容可供第二个循环读取。在开始第二个循环之前回到文件的开头:

fyle.seek(0)

虽然我只是将行缓存为列表,如果可能的话:

with open('filename.txt', 'r') as handle:
    lines = list(handle)

此外,您可以替换它:

if rows == 2:
    self.collisionLayer[rowcount][colcount] = False
else:
    self.collisionLayer[rowcount][colcount] = True

使用:

self.collisionLayer[rowcount][colcount] = rows != 2

答案 1 :(得分:1)

循环:

for lyne in fyle:

...读取fyle的所有内容,并且不会让循环读取任何内容:

for rows in fyle:

答案 2 :(得分:0)

我认为您只需要重新打开该文件即可。如果我记得,python将继续从你离开的地方开始。如果没有任何东西,它就无法读取任何东西。 您可以重新打开它,或使用fyle.seek(0)转到第一行中的第一个字符。