Turtle Graphics窗口没有响应

时间:2018-11-20 23:17:43

标签: python python-3.x turtle-graphics fractals

我正在尝试将之前制作的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进行迭代

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 :(得分:1)

此代码有太多问题,无法关注算法错误。当我尝试运行它时,得到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函数(和Julia的函数)期望将函数作为其第一个参数:

map(func, *iterables)

,它返回将func应用于iterables的结果的列表,但是您将结果视为标量值:

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

color()函数从不使用第二个参数,也从不返回任何东西!

此处的变量ab被视为全局变量,已设置但未使用,就像准备供repeat()使用一样:

global a
global b

...

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

但是a使用的brepeat()是被初始化为零的本地变量:

a = 0
b = 0

您有一个具有相同名称y_set的函数和全局变量!

您的全局变量失去控制。