我对编程很陌生,但我认为尝试编写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"陈述是真的吗?
答案 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