Объясните код упражнения Python черепаха спираль - PullRequest
0 голосов
/ 26 августа 2018

Я новичок в программировании, пытаюсь выполнить несколько простых упражнений из онлайн-курса по Python.Я нашел решение, но не могу понять код.Не могли бы вы объяснить мне это в некоторых комментариях ниже?(Я был бы признателен.)

import turtle from math 
import sin,cos,pi 

t=turtle.Turtle() 
t.speed(0)

n=50  
d=10  
r=0 
x,y = 0, 0 
cur_r = r

for i in range(n): 
    for a in range(1,360, 4): 
        r = cur_r + d*a/360.0 
        a *= pi/180.0 y = r*sin(a) 
        x = r*cos(a) 
        turtle.goto(x,y) 
        cur_r += d

1 Ответ

0 голосов
/ 26 августа 2018

Во-первых, давайте превратим это из нежизнеспособного фрагмента кода в работающую программу:

import turtle
from math import *

n = 1
d = 2
cur_r = 3

for i in range(n):
    for a in range(1, 360, 4):
        r = cur_r + d * a / 360.0
        a *= pi / 180.0
        x, y = r * cos(a), r * sin(a)
        turtle.goto(x, y)
        cur_r += d

turtle.mainloop()

Теперь давайте объясним это как можно лучше.Первый импорт:

import turtle  # turtle graphics for plotting

from math import *  # get trig routines sine and cosine plus pi constant

Следующие глобальные переменные:

n = 1  # number of revolutions around the spiral

d = 2  # growth factor (delta) for spiral radius (in 4 degrees steps)

cur_r = 3  # initial setting of current spiral radius

Код:

for i in range(n):  # for each revolution of the spiral

    for a in range(1, 360, 4):  # angle from 1 to 359 in 4 degree steps

        r = cur_r + d * a / 360.0  # new radius based on current one + delta

        a *= pi / 180.0  # convert angle from degrees to radians

        x, y = r * cos(a), r * sin(a)  # get cartesian coordinates from polar

        turtle.goto(x, y)  # draw a line from previous point to this one

        cur_r += d  # add delta to current radius before repeating process

turtle.mainloop()  # turn control over to tkinter's event handler

Ошибки:

for a in range(1, 360, 4):

Вероятно, должны иметьБыло:

for a in range(0, 360, 4):

, и '4', вероятно, должна была быть дополнительной переменной, а не жестко закодированной.Поскольку мы уже импортируем все из математической библиотеки:

a *= pi / 180.0

можно было бы написать:

a = radians(a)

Не ясно, что делает эта строка:

r = cur_r + d * a / 360.0

, который выполняет больше, чем просто:

r = cur_r

, поскольку d * a / 360.0 находится в диапазоне от d/360 до 'd'.Пересмотренный код:

import turtle
from math import cos, sin, radians

revolutions = 1
delta = 2
radius = 3
steps = 4

for i in range(revolutions):
    for angle in range(0, 360, steps):
        angle = radians(angle)
        x, y = radius * cos(angle), radius * sin(angle)
        turtle.goto(x, y)
        radius += delta

turtle.mainloop()
...