Как нарисовать последовательность Фибоначчи с помощью модуля черепаха - PullRequest
0 голосов
/ 06 февраля 2019

Это мой первый вопрос за всю историю, и я полный и полный новичок, поэтому, пожалуйста, не ешьте меня :) Я пытаюсь нарисовать последовательность Фибоначчи с использованием модуля черепахи Python.Мой код выглядит следующим образом:

import turtle

zuf = turtle.Turtle()

while True:

  zuf.forward(10)
  zuf.left(3.1415)

Это, однако, движется только в кругах.Я попытался создать переменную, скажем, X, и присвоить ей правило Фибоначчи xn = xn-1 + xn-2, тогда я бы поместил его здесь zuf.forward(x), но оно не работает.Я пробовал несколько вариантов этого, но ни один, кажется, не работает.Пожалуйста, не дайте полное решение, только немного подсказки, большое спасибо.

1 Ответ

0 голосов
/ 06 февраля 2019

Я думаю, что смогу доставить тебя туда, где ты хочешь быть.Во-первых, ваш вызов:

zuf.left(3.1415)

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

zuf = turtle.Turtle()
zuf.radians()

это все равно заставит ваш код двигаться по кругу, но очень по-разному.Далее мы хотим заменить 10 нашим значением Фибоначчи.Перед циклом while инициализируйте ваши счетчики Фибоначчи:

previous, current = 0, 1

как последний оператор в цикле while, увеличьте их:

previous, current = current, current + previous

и в вашем forward() позвоните, замените 10 на current.Далее нам нужно превратить нарисованную линию в квадрат.Для этого нам нужно сделать две вещи.Во-первых, зациклите код рисования четыре раза:

for i in range(4):
    zuf.forward(current)
    zuf.left(3.1415)

А во-вторых, вместо этого замените угол на pi / 2:

    zuf.left(3.1415 / 2)

Если вы соберете все это правильно, вы должны получитьс цифрой вроде:

enter image description here

, показывающая увеличивающийся размер значений Фибоначчи.Не самое привлекательное изображение, вам все равно придется поработать над ним, чтобы очистить его, чтобы он выглядел красиво.

Наконец, я был впечатлен кодом рисования fibonacci, на который @ IvanS95 ссылался в своем комментарии,что я написал высокоскоростную версию, которая использует штамповка вместо рисунок :

from turtle import Screen, Turtle

SCALE = 5
CURSOR_SIZE = 20

square = Turtle('square', visible=False)
square.fillcolor('white')
square.speed('fastest')
square.right(90)
square.penup()

previous_scaled, previous, current = 0, 0, 1

for _ in range(10):
    current_scaled = current * SCALE
    square.forward(current_scaled/2 + previous_scaled/2)
    square.shapesize(current_scaled / CURSOR_SIZE)
    square.left(90)
    square.forward(current_scaled/2 - previous_scaled/2)
    square.stamp()
    previous_scaled, previous, current = current_scaled, current, current + previous

screen = Screen()
screen.exitonclick()

enter image description here

Это не целое решение для вас, а лишь намек на то, что можно сделать, когда вы рисуете свои квадраты, и это решение на основе штампов, которое играет по другим правилам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...