✅作者简介:大家好我是hacker707,大家可以叫我hacker 📃个人主页:hacker707的csdn博客 🔥系列专栏:python基础教程 💬推荐一款模拟面试、刷题神器👉点击跳转进入网站
使用Turtle库绘制图形示例如下:
from turtle import Turtle, colormode, tracer, mainloop
from random import randrange
from time import perf_counter as clock
def symRandom(n):
return randrange(-n, n + 1)
def randomize(branchlist, angledist, sizedist):
return [(angle + symRandom(angledist),
sizefactor * 1.01 ** symRandom(sizedist))
for angle, sizefactor in branchlist]
def randomfd(t, distance, parts, angledist):
for i in range(parts):
t.left(symRandom(angledist))
t.forward((1.0 * distance) / parts)
def tree(tlist, size, level, widthfactor, branchlists, angledist=10, sizedist=5):
# benutzt Liste von turtles und Liste von Zweiglisten,
# fuer jede turtle eine!
if level > 0:
lst = []
brs = []
for t, branchlist in list(zip(tlist, branchlists)):
t.pensize(size * widthfactor)
t.pencolor(255 - (180 - 11 * level + symRandom(15)),
180 - 11 * level + symRandom(15),
0)
t.pendown()
randomfd(t, size, level, angledist)
yield 1
for angle, sizefactor in branchlist:
t.left(angle)
lst.append(t.clone())
brs.append(randomize(branchlist, angledist, sizedist))
t.right(angle)
for x in tree(lst, size * sizefactor, level - 1, widthfactor, brs,
angledist, sizedist):
yield None
def start(t, x, y):
colormode(255)
t.reset()
t.speed(0)
t.hideturtle()
t.left(90)
t.penup()
t.setpos(x, y)
t.pendown()
def doit1(level, pen):
pen.hideturtle()
start(pen, 20, -208)
t = tree([pen], 80, level, 0.1, [[(45, 0.69), (0, 0.65), (-45, 0.71)]])
return t
def doit2(level, pen):
pen.hideturtle()
start(pen, -135, -130)
t = tree([pen], 120, level, 0.1, [[(45, 0.69), (-45, 0.71)]])
return t
def doit3(level, pen):
pen.hideturtle()
start(pen, 190, -90)
t = tree([pen], 100, level, 0.1, [[(45, 0.7), (0, 0.72), (-45, 0.65)]])
return t
# Hier 3 Baumgeneratoren:
def main():
p = Turtle()
p.ht()
tracer(75, 0)
u = doit1(6, Turtle(undobuffersize=1))
s = doit2(7, Turtle(undobuffersize=1))
t = doit3(5, Turtle(undobuffersize=1))
a = clock()
while True:
done = 0
for b in u, s, t:
try:
b.__next__()
except:
done += 1
if done == 3:
break
tracer(1, 10)
b = clock()
return "runtime: %.2f sec." % (b - a)
if __name__ == '__main__':
main()
mainloop()
运行结果如下: