Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 海龟()不旋转多个球加上属性错误_Python_Numpy_Turtle Graphics_Python Turtle - Fatal编程技术网

Python 海龟()不旋转多个球加上属性错误

Python 海龟()不旋转多个球加上属性错误,python,numpy,turtle-graphics,python-turtle,Python,Numpy,Turtle Graphics,Python Turtle,我想创建一个不同半径的圆,类似于太阳系。在我的尝试中,算法应该创建球-将它们初始化为半径位置,然后同时开始旋转,在我的尝试中,球不会同时开始旋转,我怀疑这与for循环有关 值得指出的是,有时我会遇到一个错误,说海龟没有属性“dy”,但有时它没有显示错误。尽管如此,我的主要目标是在不同半径处初始化球,并且球同时启动。您错误地将代码描述为正在工作,但有bug-您的代码根本没有运行,修复遇到的前几个bug是不够的: 在这方面: ball.goto(raduis,y[i]) 代码中此时没有定义i变量。

我想创建一个不同半径的圆,类似于太阳系。在我的尝试中,算法应该创建球-将它们初始化为半径位置,然后同时开始旋转,在我的尝试中,球不会同时开始旋转,我怀疑这与for循环有关


值得指出的是,有时我会遇到一个错误,说海龟没有属性“dy”,但有时它没有显示错误。尽管如此,我的主要目标是在不同半径处初始化球,并且球同时启动。

您错误地将代码描述为正在工作,但有bug-您的代码根本没有运行,修复遇到的前几个bug是不够的:

在这方面:

ball.goto(raduis,y[i])
代码中此时没有定义i变量。这个半径范围对于海龟来说太窄了,每个海龟大约占20个像素:

raduis = np.random.randint(0,8)
行星会重叠到难以区分的程度。现在还不清楚这是怎么回事:

ball.speed(np.random.randint(15))
乌龟的速度法只能在0-10范围内使用,不能在15范围内使用。它不会对你的动画产生任何真正的影响。这是最奇怪的:

raduis*np.sin(a)[i]
在循环中一遍又一遍,你让numpy将整个角度数组转换成正弦,然后只使用其中一个-你可以从中选择一个,然后取其正弦。您的代码通常显示出对numpy的数组操作缺乏理解,可能是在没有它的情况下编写的。最后,这种运动计算是假的:

ball.sety(ball.ycor()+raduis*np.sin(a)[i] +ball.dy)
我们在一个基于半径和角度的圆中移动,所以ball.ycor和ball.dy在这里没有任何关系

下面是我对代码的修改,以使三个对象围绕中心运行

from turtle import Screen, Turtle
from random import choice
from numpy import linspace, pi, cos, sin

angles = linspace(0, pi*2, 100)
sines, cosines = sin(angles), cos(angles)

ball_colours = ['orange', 'blue', 'brown', 'black', 'red', 'pink', 'yellow']
ball_shapes = ['circle', 'square', 'triangle']

screen = Screen()

balls = []

for radius in range(40, 160, 40):
    x = radius * cosines[0]
    y = radius * sines[0]

    ball = Turtle()
    ball.shape(choice(ball_shapes))
    ball.color(choice(ball_colours))
    ball.penup()
    ball.goto(x, y)
    ball.pendown()

    ball.radius = radius

    balls.append(ball)

for i in range(1, len(angles)):
    for ball in balls:
        ball.goto(ball.radius * cosines[i], ball.radius * sines[i])

screen.mainloop()
缺少的是让物体以不同的速度移动-我将此作为练习留给您:


您还可以使用turtle的内置方法绘制圆:

from turtle import Screen, Turtle
from random import choice

ball_colours = ['orange', 'blue', 'brown', 'black', 'red', 'pink', 'yellow']
ball_shapes = ['circle', 'square', 'triangle']

balls = []

for radius in range(40, 160, 40):
    ball = Turtle()
    ball.shape(choice(ball_shapes))
    ball.color(choice(ball_colours))
    ball.radius = radius
    ball.speed(0)
    ball.penup()
    ball.goto(0,-radius)
    ball.pendown()
    balls.append(ball)
    
for a in range(360):
    for ball in balls:
        ball.circle(ball.radius,1)

screen.mainloop()
输出:

有时我会遇到一个错误,说海龟没有属性“dy”,但有时它没有显示错误

在调用它之前,您需要确保定义了Turtle.dy

from turtle import Screen, Turtle
from random import choice

ball_colours = ['orange', 'blue', 'brown', 'black', 'red', 'pink', 'yellow']
ball_shapes = ['circle', 'square', 'triangle']

balls = []

for radius in range(40, 160, 40):
    ball = Turtle()
    ball.shape(choice(ball_shapes))
    ball.color(choice(ball_colours))
    ball.radius = radius
    ball.speed(0)
    ball.penup()
    ball.goto(0,-radius)
    ball.pendown()
    balls.append(ball)
    
for a in range(360):
    for ball in balls:
        ball.circle(ball.radius,1)

screen.mainloop()