我需要一些关于Python中TurtleGraphics的问题的帮助:
tipsy_turtle()的一个小细节是,当龟转90度时,它会立即“跳跃”到新的方向。这使它的运动看起来像是锯齿状的。如果乌龟在转弯时平稳移动可能看起来更好。因此,对于这个问题,编写一个名为smooth_tipsy_turtle()的函数与tipsy_turtle()相同,除了使用turtle.right(d)函数,编写一个名为smooth_right(d)的全新函数,其工作方式如下:
- If d is negative then
- repeat the following -d times:
- turn left 1 using the ordinary turtle.left command
- Otherwise, repeat the following d times:
- turn right 1 using the ordinary turtle.right command
这是我获得随机龟运动的原始功能:
def tipsy_turtle(num_steps):
turtle.reset()
for step in range(num_steps):
rand_num = random.randint(-1, 1)
turtle.right(rand_num * 90)
turtle.forward(5 * random.randint(1, 3))
那么,我将如何开展这项工作呢?我尝试添加:
if rand_num*90 < 0:
for step in range(rand_num*90):
turtle.left(rand_num*90)
else:
turtle.right(rand_num*90)
但它并没有真正解决,我不知道我做错了什么。谢谢!
答案 0 :(得分:2)
希望此示例能够清除您示例中出现的问题 - 您左转rand_num*90*rand_num*90
或右转rand_num*90
!
if rand_num < 0: # don't need to multiply by 90 here - it's either +ve or -ve.
for step in xrange(90): # xrange is preferred over range in situations like this
turtle.left(rand_num) # net result is 90 left turns in rand_num direction
else:
for step in xrange(90):
turtle.right(rand_num)
或者你可以写成:
for step in xrange(90):
if rand_num < 0:
turtle.left(rand_num)
else:
turtle.right(rand_num)
对于这样的代码,这确实是一个偏好的问题。
答案 1 :(得分:0)
你可能没有左 - 右 - 右的条件。我没有python语法,所以这里是伪代码
turtle left randomly generated value 0 to 90
turtle right randomly generated value 0 to 90
turtle forward some amount
即,生成一个随机角度并向左转那么多,然后生成另一个随机角度并向右转那么多。这样您就不必担心生成或处理负数。你可以保持所有随机角度为正,左边和右边的组合有效地为你做一个减法,这给出了方向变化的一个很好的高斯分布。
答案 2 :(得分:0)
我想我会冒险回答,即使我不完全确定你想要什么(请参阅我对这个问题的评论,如果我编辑这个答案,请不要感到惊讶!)。
假设您希望乌龟在每一步都转动一定数量的度数,不一定是90度,但不能超过90度,那么只需使用rand_num = random.randint(-90, 90)
然后使用turtle.right(rand_num)
。