Графическое окно Turtle не отвечает - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь перевести генератор множеств Julia, который я сделал ранее, в код Python.Однако, когда код выполняется, графическое окно черепахи перестает отвечать немедленно и ничего не рисует.Я сделал что-то ужасно неправильно или я что-то упустил?Возможно, я прошу слишком много Python сделать в 1 кадре.Пожалуйста, объясните, что вызывает это, и как я могу это исправить.Спасибо!

import turtle
import time

y_set = []
map_output = 0
iterations = 0
#turtle.hideturtle()
#turtle.speed(1)

создать список значений y

def y_set (r):
    global y_set
    y_set = []
    for n in range ((360*2)+1):
        y_set.append(n)

создать значение цвета

def color (i, n):
    output = map(i, 2, 10000, 0, 2500)
    if output < 0:
        output = 0
    if output > 0:
        output = 255

итерацию по x *

def repeat (n, r, i):
    global iterations
    global x
    global y
    aa = 0
    ba = 0
    ab = 0
    a = 0
    b = 0
    for j in range (n):
        iterations += 1
        aa = a * a
        bb = b * b
        ab = 2 * a * b
        a = ((aa - bb) + float(r))
        b = (ab + float(i))
        if (ab + bb) > 4:
            break
    turtle.setx(100 * x)
    turtle.sety(100 * y)
    color(iterations, n)
    turtle.pendown()
    turtle.penup()

Перейдите на y's

def Julia (s, r, i, d):
    global iterations
    global y_set
    global x
    global y
    global a
    global b
    y_set(s)
    while len(y_set) > 0:
        y = y_set[0]/360
        del y_set[0]
        x = -1.5
        for n in range (round((700/(float(r)+1))+1)):
            a = x
            b = y
            iterations = 0
            repeat(10**d, r, i)
            x += ((1/240)*s)

пользовательский ввод

real = input('Real: ')
imag = input('Imaginary: ')

Julia (1, real, imag, 100)
turtle.done()

1 Ответ

0 голосов
/ 21 ноября 2018

Слишком много проблем с этим кодом, чтобы сосредоточиться на ошибке алгоритма.Когда я пытаюсь запустить его, я получаю TypeError: 'int' object is not iterable.Особые проблемы:

Аргументу i здесь передается число:

    iterations += 1
...
color(iterations, n)
...

def color(i, n):
    output = map(i, 2, 10000, 0, 2500)

, но функция Python map (и Джулии) ожидает функцию в качестве первого аргумента:

map(func, *iterables)

и возвращает список результатов применения func к iterables, но вы рассматриваете результат как скалярное значение:

output = map(i, 2, 10000, 0, 2500)
if output < 0:
    output = 0
if output > 0:
    output = 255

Функция color() никогда не используетвторой аргумент, и никогда ничего не возвращает!

Переменные a & b здесь обрабатываются как глобальные, устанавливаются, но не используются, как если бы они были подготовлены для использования repeat():

global a
global b

...

a = x
b = y
iterations = 0
repeat(10 ** d, r, i)

, но a & b, используемые repeat(), являются локальными переменными, инициализированными нулями:

a = 0
b = 0

У вас есть функция и глобальная переменная с одинаковым именем y_set!

И ваши глобалы вышли из-под контроля.

...