我正在尝试将之前制作的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()
答案 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()
函数从不使用第二个参数,也从不返回任何东西!
此处的变量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
的函数和全局变量!
您的全局变量失去控制。