用python的turtle库画圣诞树

代码如下(带详细注释)

#from xx import*可直接调用xx模块中的函数,因为已经知道该函数是哪个模块中的了
#import导入模块,每次使用模块中的函数都是要定那个模块
#为避免名称冲突,一般都使用import
from turtle import *
import random
import time

n = 100.0

#设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快
speed(10)

#设置画布大小screen(canvwidth,canvheight,bg),
#若不设置值,默认参数为(400,300,None),bg为背景颜色
screensize(bg='seashell')

#设置画笔粗细
pensize(1)

#逆时针旋转90°,类似极坐标
left(90)

#向当前画笔方向移动3*n像素长度,树干出来了
forward(3*n)

#pencolor=orange,fillcolor=yellow,铅笔颜色是橙色,填充色是黄色
color("orange", "yellow")

#开始填充图形
begin_fill()

#画笔方向由当前方向逆时针旋转126°=54°+72°
left(126)

#画五角星
#循环五次
for i in range(5):
    #向当前画笔方向移动n/5像素长度
    forward(n / 5)
    
    #顺时针旋转144°=180°-36°
    right(144)
    
    #向当前画笔方向移动n/5像素长度
    forward(n / 5)
    
    #逆时针旋转72°,到此画出了一个角
    left(72)
    
#填充完成,五角星结束
end_fill()

#顺时针旋转126°=72°+54°,方向竖直向上
right(126)

#画笔颜色变为red
color("red")

#向当前画笔方向反向(即竖直向下)移动n*4.8的像素长度
#加长了树干,并覆盖掉原有颜色
backward(n * 4.8)

#颜色变为dark green,可以更好观察画笔移动情况
color("dark green")

#自定义函数,传入d和s
def tree(d, s):
    
    #如果d小于或等于0,则结束
    if d <= 0: return
    
    #向当前方向前进s像素长度
    forward(s)
    color("black")
    
    #递归调用
    tree(d - 1, s * .8)
    
    color("red")
    right(120)
    
    tree(d - 3, s * .5)
    
    color("blue")
    right(120)
    
    tree(d - 3, s * .5)
    color("green")
    right(120)
    
    backward(s)
    color("orange")

tree(15, n)
#绿色部分结束

#函数调用结束后,换成黄色
color("yellow")

#向与当前方向相反的方向移动n/2像素长度
backward(n / 2)


#调用随机模块中的函数,实现叶子飘落在地上,循环200for i in range(200):
    
    ##random.random()是指随机生成(0,1)之间的浮点数
    #水平方向a取[-200,200]
    a = 200 - 400 * random.random()
   
   
    #竖直方向b取[-10,10]
    b = 10 - 20 * random.random()
   
    up()
    forward(b)
    left(90)
    forward(a)
    down()
    
    #随机选择颜色
    ##random.randint(上限,下限),随机生成在范围之内的整数,两个参数分别表示上限和下限
    ##randint为random模块下的函数,在01之间产生随机数
    if random.randint(0, 1) == 0:
        
        #如果随机数为0,则颜色为tomato
        color('tomato')
        
    else:
        #否则颜色为wheat
        color('wheat')
    
    #每次画两个圈
    circle(2)
    
    #即penup,提起笔移动,不绘制图形,用于另起一个地方绘制
    up()
    
    backward(a)
    
    right(90)
    
    backward(b)
    #本循环的最后一个语句

#测试一下sleep函数功能,为何要sleep呢?
##print ("Start : %s" % time.ctime())
#推迟线程的运行?单位为s
time.sleep(60)
##print ("End : %s" % time.ctime())

运行结果如下图
在这里插入图片描述

代码是在网上找的,注释是自己写的,代码为了更好观察略有改动。使用sleep的目的, 我还暂时不清楚,如果有小伙伴知道,欢迎在【评论区】告诉我啊。

如需转载请注明出处。

猜你喜欢

转载自blog.csdn.net/m0_51336041/article/details/113406419