Python龟随机走在一个边界内

时间:2015-01-23 15:29:23

标签: python turtle-graphics

我想使用乌龟创建一个程序,它在随机方向上进行50次移动随机距离,在x和y轴上保持在-300到300之间(通过向相反方向转动并在到达时向前移动边界)。

当if语句为true时,代码运行正常,但偶尔执行else语句时(由于超出边界),else语句将一次又一次地执行,直到计数达到50.换句话说,它会倒退沿着同一条线前进。我不明白为什么因为当乌龟反弹时它应该在边界内并再次运行if语句,而不是else语句。我怎么能解决这个问题,以便乌龟在弹跳后继续随机游走?感谢

我的代码如下所示

import turtle
import random

count = 0
while count <51:
    count += 1
    if (turtle.xcor() >-300 and turtle.xcor() <300) and\
       (turtle.ycor() >-300 and turtle.ycor() <300):
        turtle.forward(random.randint(30,100))
        turtle.right(random.randint(0,360))
    else:
        turtle.right(180)
        turtle.forward(300)

2 个答案:

答案 0 :(得分:3)

在if语句中,首先应该转向,然后继续:

假设你在(0,299),乌龟朝上,你会前进(比方说100),然后转(让我们说左)。然后你将在(0,399),面向左边。

然后你将进入else循环,向右/ 300,所以将在300/399,所以仍然是超出界限(注意forward(300)可能有点太多了。)

如果你先转弯,那么往前走,你真的会掉头 但是再一次,300可能会更多。我宁愿用以下的东西保存以前的距离:

if (-300 < turtle.xcor() <300) and (-300 < turtle.ycor() <300):
    turtle.right(random.randint(0,360))
    distance = random.randint(30,100) 
    turtle.forward(distance)
else:
    turtle.right(180)
    turtle.forward(distance)

想象一下你在(299,299),向前走135°(向上/向左移动),向前走100.然后你会有y>300,如果你掉头,向前转300,你就会有x>300。然后再循环一次。

答案 1 :(得分:1)

您是否尝试在turtle.forward(random.randint(30,100))语句中切换turtle.right(random.randint(0,360))if,反之亦然?

感觉就像你走出界,然后转身。然后它转到else,它再次转向,并进一步走出界限