注释版的来了,基本每一句都添加了注释。作者也对这个程序理解了一下。
- 这个程序是随机画樱花树,基本每一次树都长得不一样,可能很茂密也可能跟中年程序员的头顶一样稀疏。因为这个程序的灵魂就是random模块,通过随机数来用白色和淡珊瑚色来对樱花进行点缀,通过随机数来决定树枝长度树枝分叉几次
- 整个程序的基础可以看作一棵二叉树,实际上就是把这棵二叉树画出来,再加以随机数导致各个树枝长短不一粗细不一加上颜色点缀就呈现出这么好看的樱花树了(玄妙)
- 基础还是海龟绘图turtle模块,用的都是海龟绘图的基本操作,有不明白的建议移步turtle海龟绘图
- 程序中有很多数值,比如branch的几个分界线,这都是不断测试出来的最佳数值,具体怎么来的有时间可以自己探讨,改了这些数值樱花树的效果就不是那么好了。这里不作详细解释
以下为原文
今天看见的太好看了先马下来明天再研究研究!明天就把详细注释补上!争取让每个渣男都能拿来夺取女朋友欢心(手动滑稽)
import turtle as T#将turtle库定义为T便于调用
import random#引进random模块用于生成随机数
import time#系统时间模块
def Tree(branch, t):# 画樱花的躯干的函数
time.sleep(0.0005)#系统暂停0.0005s
if branch > 3:
if 8 <= branch <= 12:
if random.randint(0, 2) == 0:#三分之一的概率
t.color('snow') # 雪白色
else:#三分之二的概率
t.color('lightcoral') # 淡珊瑚色
t.pensize(branch / 3)#设置画笔的尺寸
elif branch < 8:
if random.randint(0, 1) == 0:#二分之一的概率
t.color('snow')
else:
t.color('lightcoral') # 淡珊瑚色
t.pensize(branch / 2)
else:
t.color('sienna') # 赭(zhě)色
t.pensize(branch / 10) # 6
t.forward(branch)#画笔前进branch那么长
a = 1.5 * random.random()#a得到一个随机值
t.right(20 * a)#画笔右转20*a度
b = 1.5 * random.random()#b取得一个随机值
Tree(branch - 10 * b, t)#这是一个递归嵌套的过程
t.left(40 * a)#画笔左转40*a度
Tree(branch - 10 * b, t)#这是一个递归调用的过程
t.right(20 * a)#画笔右转20*a度
t.up()#画笔抬起,也即是之后的操作不会再屏幕上留下笔迹
t.backward(branch)#画笔倒退branc那么远
t.down()#画笔落下
# 掉落的花瓣
def Petal(m, t):
for i in range(m):#m次循环
a = 200 - 400 * random.random()#给a一个随机值
b = 10 - 20 * random.random()#给b一个随机值
t.up()#画笔抬起
t.forward(b)#画笔倒退b距离
t.left(90)#画笔左转90度
t.forward(a)#画笔直走a距离
t.down()#画笔落下
t.color('lightcoral') # 淡珊瑚色
t.circle(1)#画一个半径为1的圆,其实就是花瓣
t.up()#画笔抬起
t.backward(a)#画笔倒退a距离
t.right(90)#画笔右转90度
t.backward(b)#画笔倒退b距离
# 绘图区域
def main():
t = T.Turtle()
# 画布大小
w = T.Screen()#
t.hideturtle() # 隐藏画笔
t.getscreen().tracer(5, 0)
w.screensize(bg='wheat') # wheat小麦
t.left(90)#左转
t.up()
t.backward(150)
t.down()
t.color('sienna')
# 画樱花的躯干
Tree(60, t)
# 掉落的花瓣
Petal(200, t)
w.exitonclick()
if __name__=='__main__':
main()
少女行萌动。over