为什么这些条件多次成立?

2024-04-24 09:12:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一段非常复杂的代码:

def translate(self, direction, step):

    def iterate(n1,n2,boolean):
        for j in self.gridKeys:
            if boolean == True:
                if ((j[0][0] == i[0][0]+n1) and (j[0][1] == i[0][1]+n2)):
                    if ((j[1] not in self.collisionGids) and (j[1] == '0')):
                        j[1] = i[1]
                        j[1].setX(j[0][0])
                        j[1].setY(j[0][1])
                        i[1] = '0'
            if boolean == False:
                if ((j[0][0] == i[0][0]-n1) and (j[0][1] == i[0][1]-n2)):
                    if ((j[1] not in self.collisionGids) and (j[1] == '0')):
                        j[1] = i[1]
                        j[1].setX(j[0][0])
                        j[1].setY(j[0][1])
                        i[1] = '0'

    for i in self.gridKeys:
        if isinstance(i[1],(Grect,Grict)):
            if direction == 0:
                iterate(0,1,False)
                print "True just once."
            elif direction == 1:
                iterate(0,1,True)
                print "True many times."
            elif direction == 2:
                iterate(1,0,False)
                print "True just once."
            elif direction == 3:
                iterate(1,0,True)
                print "True many times."

通过键盘输入选择方向:

@staticmethod
def useBasicMovement(keys, collisionModel, step):

    if keys[pygame.K_UP] or keys[pygame.K_w]:
        collisionModel.translate(0,step) # <<< FOCUS HERE
    elif keys[pygame.K_DOWN] or keys[pygame.K_s]:
        collisionModel.translate(1,step) # <<< FOCUS HERE
    elif keys[pygame.K_LEFT] or keys[pygame.K_a]:
        collisionModel.translate(2,step) # <<< FOCUS HERE
    elif keys[pygame.K_RIGHT] or keys[pygame.K_d]:
        collisionModel.translate(3,step) # <<< FOCUS HERE

当我只按一次向上或向左键时,它就会到达他们的代码块并只打印一次。但当我按下向下或向右键时,它会打印很多次(出于某种原因,它会一直打印到列表的末尾)。这有点难以解释。。。以下是自我网格地址:

[[(0, 0), '1'], [(1, 0), '1'], [(2, 0), '1'], [(3, 0), '1'], [(4, 0), '1'], [(5, 0), '1'], [(6, 0), '1'], [(7, 0), '1'], [(8, 0), '1'], [(9, 0), '1'], [(0, 1), '1'], [(1, 1), '0'], [(2, 1), '0'], [(3, 1), '0'], [(4, 1), '1'], [(5, 1), '1'], [(6, 1), '0'], [(7, 1), '0'], [(8, 1), '0'], [(9, 1), '1'], [(0, 2), '1'], [(1, 2), '0'], [(2, 2), '0'], [(3, 2), '0'], [(4, 2), '0'], [(5, 2), '0'], [(6, 2), '0'], [(7, 2), '0'], [(8, 2), '0'], [(9, 2), '1'], [(0, 3), '1'], [(1, 3), '0'], [(2, 3), <pythun.Grict instance at 0x02447288>], [(3, 3), '0'], [(4, 3), '0'], [(5, 3), '0'], [(6, 3), '0'], [(7, 3), '0'], [(8, 3), '0'], [(9, 3), '1'], [(0, 4), '1'], [(1, 4), '0'], [(2, 4), '0'], [(3, 4), '0'], [(4, 4), '0'], [(5, 4), '0'], [(6, 4), '0'], [(7, 4), '0'], [(8, 4), '0'], [(9, 4), '1'], [(0, 5), '1'], [(1, 5), '3'], [(2, 5), '0'], [(3, 5), '0'], [(4, 5), '0'], [(5, 5), '0'], [(6, 5), '0'], [(7, 5), '0'], [(8, 5), '0'], [(9, 5), '1'], [(0, 6), '1'], [(1, 6), '1'], [(2, 6), '1'], [(3, 6), '1'], [(4, 6), '0'], [(5, 6), '0'], [(6, 6), '0'], [(7, 6), '0'], [(8, 6), '4'], [(9, 6), '1'], [(0, 7), '1'], [(1, 7), '0'], [(2, 7), '0'], [(3, 7), '0'], [(4, 7), '0'], [(5, 7), '0'], [(6, 7), '0'], [(7, 7), '1'], [(8, 7), '1'], [(9, 7), '1'], [(0, 8), '1'], [(1, 8), '0'], [(2, 8), '0'], [(3, 8), '0'], [(4, 8), '0'], [(5, 8), '0'], [(6, 8), '0'], [(7, 8), '1'], [(8, 8), '1'], [(9, 8), '1'], [(0, 9), '1'], [(1, 9), '1'], [(2, 9), '1'], [(3, 9), '1'], [(4, 9), '1'], [(5, 9), '1'], [(6, 9), '1'], [(7, 9), '1'], [(8, 9), '1'], [(9, 9), '1']]

如您所见,在这个列表的某个点上有一个Grict类的实例,如果这是真的,它会再次遍历所有相同的列表,然后我根据上一个列表设置新的位置(我在列表中移动一个对象,平铺位置就是元组)。出于某种原因,“下”和“右”被执行了很多次。为什么这些条件多次成立?有什么可能性?如果我在translate方法之外打印(如果按了键就打印),我会得到所有4个的“一次”。但由于某种原因,这两段代码执行了很多次。我知道把它简化成一个简单的例子是件麻烦的事,但我做不到,所以对此我很抱歉。你知道吗


Tags: andinselftrue列表ifstepkeys