如何检查一组坐标是否在列表中

时间:2015-11-10 20:10:19

标签: python

我对编程很陌生,但我认为尝试编写Langton的蚂蚁会很有趣。对于那些不了解的人来说,它是一只在板上走来走去的蚂蚁。当它碰到一个红色正方形时,它向右转并将红色正方形颜色变为白色,当它碰到一个白色正方形时,它向左转,将前一个白色正方形颜色变为红色。凭借我对编程的非常原始的知识,我想出了这个程序:

def Move(direction):
    global x
    global y
    if direction % 4 == 0:
        y += 1
    elif direction % 4 == 1:
        x += 1
    elif direction % 4 == 2:
        y -= 1
    else:
        x -= 1

Lred = []
Lwhite = []
# To make sure the program recognizes the squares as being white initially.
for i in range(-4, 5):
    for i2 in range(-4, 5):
        Lwhite.append([i2,i])

x = 0
y = 0
direct = 0

# Here I try to make the first 10 steps.
for i in range(10):
    print [x,y]
    if [x,y] in Lred:
        Lred.remove([x,y])
        Lwhite.append([x,y])
        direct-=1
    if [x,y] in Lwhite:
        print "white square"
        Lwhite.remove([x,y])
        Lred.append([x,y])
        direct+=1
    Move(direct)
print Lwhite
print Lred

正如您在运行此程序时所看到的,它表示第二次点击[0,0]时方块为白色,但是当它开始时,它应该将其着色为红色。 [0,0]位于最后打印的红色方块列表中,并且不在白色方块列表中。这就是我想要的。

但为什么它仍然考虑"如果[x,y]在Lwhite"陈述是真的吗?

1 个答案:

答案 0 :(得分:2)

每次你的蚂蚁击中平方时,都会检查它是否为红色。如果它是红色,则使方形白色并旋转蚂蚁。然后,它检查方块是否为白色,始终为真,因为如果它是红色,则前一步骤为白色。使用elif语句而不是if语句可以解决此问题。

# Here I try to make the first 10 steps.
for i in range(10):
    print [x,y]
    if [x,y] in Lred:
        Lred.remove([x,y])
        Lwhite.append([x,y])
        direct-=1
    elif [x,y] in Lwhite:
        print "white square"
        Lwhite.remove([x,y])
        Lred.append([x,y])
        direct+=1
    Move(direct)
print Lwhite
print Lred