Python 海龟在边界内随机游走
Python turtle random walk within a boundary
我想使用乌龟创建一个程序,该程序在随机距离上沿随机方向移动 50 次,在 x 轴和 y 轴上保持在 -300 到 300 之间(通过在相反方向转动并向前移动时它到达了边界)。
代码运行在if语句为真时没问题,但偶尔执行else语句时(由于越界)else语句会反复执行,直到count达到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)
您是否尝试将 if
语句中的 turtle.forward(random.randint(30,100))
和 turtle.right(random.randint(0,360))
反过来?
感觉就像是走出了界限,然后转身。然后它走到else
,又转弯,走得更远进入界外
if语句中,应先转向,再前进:
假设你在 (0,299),乌龟面朝上,你会向前(比方说 100),然后转弯(比方说向左)。然后您将位于 (0, 399),面向左侧。
然后你将进入 else 循环,进入 right/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° (diag up/left),前进 100。然后你将有 y>300
,如果你掉头,前进 300 ,您将有 x>300
。然后再循环。
我想使用乌龟创建一个程序,该程序在随机距离上沿随机方向移动 50 次,在 x 轴和 y 轴上保持在 -300 到 300 之间(通过在相反方向转动并向前移动时它到达了边界)。
代码运行在if语句为真时没问题,但偶尔执行else语句时(由于越界)else语句会反复执行,直到count达到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)
您是否尝试将 if
语句中的 turtle.forward(random.randint(30,100))
和 turtle.right(random.randint(0,360))
反过来?
感觉就像是走出了界限,然后转身。然后它走到else
,又转弯,走得更远进入界外
if语句中,应先转向,再前进:
假设你在 (0,299),乌龟面朝上,你会向前(比方说 100),然后转弯(比方说向左)。然后您将位于 (0, 399),面向左侧。
然后你将进入 else 循环,进入 right/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° (diag up/left),前进 100。然后你将有 y>300
,如果你掉头,前进 300 ,您将有 x>300
。然后再循环。