我想使用乌龟创建一个程序,它在随机方向上进行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)
答案 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
,它再次转向,并进一步走出界限