编程语言
首页 > 编程语言> > Python乌龟在边界内随机游走

Python乌龟在边界内随机游走

作者:互联网

我想使用乌龟创建一个程序,该程序在随机方向上移动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)

解决方法:

在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,如果您进行U形转弯并向前/ 300,您将拥有x> 300.然后再次循环.

标签:turtle-graphics,python
来源: https://codeday.me/bug/20191028/1954704.html