Level 1
先看下最最最基础版的 Level 1 ,一行代码搞定,看完之后不要打我(狗头保命)
print('\n'.join(' '*(20-i)+'/'+' '*2*i+'\\' for i in range(20)))
效果可能差强人意,但一行代码也做不了太多东西,这里只能先给个轮廓看了,有更好想法的小伙伴可以在下方留言区滴滴
Level 2
此版本是 Level 1 的改进版,看到 Level 1 效果后可能有小伙伴感觉自己被 "欺骗" 了,啥也没有,分明就是两根线在那里搭着;因此,Level 2 丰富前者内部的空洞,加了些雪花效果;
代码不多,比 Level 1 多了1行 import random
print('\n'.join(' '*(20-i)+'/'+''.join(random.choice(' # *') for _ in range(2*i))+'\\' for i in range(20)))
里面加完点 "雪花效果” 之后,Level 2 是不是有那么一丝丝圣诞树的感觉了,
Level 1 和 Level 2 都是 借助 print
实现了一个打印效果,真正好看的展示效果还需要借助 Python 的一个 绘图包 turtle
: 通过使用一些简单组合命令,可以轻松地绘制出精美的形状和图案
Level 3
Level 3 版是一个卡通少儿版的,呈现效果像是用蜡笔绘制而成:深色和浅色相搭配,满满少女心,树上也缀有圣诞袜、五角星等装饰品
def iou(x, y, z): penup() goto(x, y) pencolor("#f799e6") pendown() seth(z) for po in range(10): fd(4) left(18) # 圣诞帽 seth(-20) pensize(2) penup() goto(-30, -120) pencolor("black") pendown() fillcolor("red") fd(30) circle(4, 180) fd(30) circle(4, 180) penup() goto(-25, -115) seth(75) pendown() begin_fill() for i in range(5): fd(6) right(20) seth(-10) for i in range(5): fd(8) right(15) seth(145) for i in range(5): fd(5) left(2) seth(90) for i in range(5): fd(1) left(2) seth(-90) for i in range(4): fd(4) right(6) seth(161) fd(30) end_fill() pensize(1) pencolor("black") def koc(x, y, size): pensize(2) pencolor("black") penup() goto(x, y) pendown() begin_fill() fillcolor("yellow") for i in range(5): left(72) fd(size) right(144) fd(size) end_fill()
Level 4
在Level 1-Level 5 这几个版本的圣诞树中,个人最喜欢 Level 4 中分支的效果:又细又绿,整体看起来简约而不失真;
import turtle # 定义圣诞树的绿叶函数 def tree(d, s): if d <= 0: return turtle.forward(s) tree(d - 1, s * .8) turtle.right(120) tree(d - 3, s * .5) turtle.right(120) tree(d - 3, s * .5) turtle.right(120) turtle.backward(s) n = 100 """ 设置绘图速度 'fastest' : 0 'fast' : 10 'normal' : 6 'slow' : 3 'slowest' : 1 """ turtle.speed('fastest') # 设置速度 turtle.left(90) turtle.forward(3 * n) turtle.color("orange", "yellow") turtle.left(126) # turtle.begin_fill() for i in range(5): turtle.forward(n / 5) turtle.right(144) turtle.forward(n / 5) turtle.left(72) turtle.end_fill() turtle.right(126) turtle.color("dark green") turtle.backward(n * 4.8) # 执行函数 tree(15, n) turtle.backward(n / 5)
Level 5
Level 5 作为最后一个版本,效果当然是这几个版本中最贴近于真实圣诞树的,装饰品、平安果,圣诞节礼物要啥有啥,此外漫天雪花、黑夜背景也被绘制出来了,整体氛围是超级棒(当然代码行数相对也是较多的😂)
n = 100.0 t.pensize(10) # 修改画笔大小 speed("fastest") # 定义速度 screensize(bg='black') # 定义背景颜色,可以自己换颜色 left(90) forward(3 * n) color("orange", "yellow") # 定义最上端星星的颜色,外圈是orange,内部是yellow begin_fill() left(126) for i in range(5): # 画五角星 forward(n / 5) right(144) # 五角星的角度 forward(n / 5) left(72) # 继续换角度 end_fill() right(126) def drawlight(): # 定义画彩灯的方法 if r.randint(0, 30) == 0: # 如果觉得彩灯太多,可以把取值范围加大一些,对应的灯就会少一些 color('tomato') # 定义第一种颜色 circle(6) # 定义彩灯大小 elif r.randint(0, 30) == 1: color('orange') # 定义第二种颜色 circle(3) # 定义彩灯大小 else: linewidth = 5 color('dark green') # 其余的随机数情况下画空的树枝 color("dark green") # 定义树枝的颜色 backward(n * 4.8) def tree(d, s): # 开始画树 if d <= 0: return forward(s) tree(d - 1, s * .8) right(120) tree(d - 3, s * .5) drawlight() # 同时调用小彩灯的方法 right(120) tree(d - 3, s * .5) right(120) backward(s) tree(15, n) backward(n / 2) for i in range(200): # 循环画最底端的小装饰 a = 200 - 400 * r.random() b = 10 - 20 * r.random() up() forward(b) left(90) forward(a) down() if r.randint(0, 1) == 0: color('tomato') else: color('wheat') circle(2) up() backward(a) right(90) backward(b) t.color("dark red", "red") # 定义字体颜色 t.write("Merry Christmas", align="center", font=("Comic Sans MS", 40, "bold")) # 定义文字、位置、字体、大小 def drawsnow(): # 定义画雪花的方法 t.ht() # 隐藏笔头,ht=hideturtle t.pensize(2) # 定义笔头大小 for i in range(200): # 画多少雪花 t.pencolor("white") # 定义画笔颜色为白色,其实就是雪花为白色 t.pu() # 提笔,pu=penup t.setx(r.randint(-350, 350)) # 定义x坐标,随机从-350到350之间选择 t.sety(r.randint(-100, 350)) # 定义y坐标,注意雪花一般在地上不会落下,所以不会从太小的纵座轴开始 t.pd() # 落笔,pd=pendown dens = 6 # 雪花瓣数设为6 snowsize = r.randint(1, 10) # 定义雪花大小 for j in range(dens): # 就是6,那就是画5次,也就是一个雪花五角星 # t.forward(int(snowsize)) #int()取整数 t.fd(int(snowsize)) t.backward(int(snowsize)) # t.bd(int(snowsize)) #注意没有bd=backward,但有fd=forward,小bug t.right(int(360 / dens)) # 转动角度