文章目录
- ❄️Python制作圣诞节贺卡
- 🐬展示效果
- 🌸代码
- 🌴代码剖析
- ❄️Python制作圣诞树贺卡
- 🐬展示效果
- 🌸代码
- 🌴代码剖析
- 🌸总结
- 🎅圣诞节快乐!
❄️Python制作圣诞节贺卡
🐬展示效果
🌸代码
import turtle import random import time width = 600 height = 500 window = turtle.Screen() window.setup(width, height) window.bgcolor("sky blue") window.title("Merry Christmas") snowball_rate = 1, 3 snowball_size = 5, 15 wind_change = 1, 5 max_wind = 3 # Create all circle-shaped objects def make_circle(turtle_name, x, y, size, colour): turtle_name.color(colour) turtle_name.penup() turtle_name.setposition(x, y) turtle_name.dot(size) # Create new snowballs and store in list list_of_snowballs = [] def make_snowball(): snowball = turtle.Turtle() snowball.color("white") snowball.penup() snowball.setposition(random.randint(-2*width, width/2), height/2) snowball.hideturtle() snowball.size = random.randint(*snowball_size) list_of_snowballs.append(snowball) def move_snowball(turtle_name, falling_speed=1, wind=0): turtle_name.clear() turtle_name.sety(turtle_name.ycor() - falling_speed) if wind: turtle_name.setx(turtle_name.xcor() + wind) turtle_name.dot(turtle_name.size) # Snowman: body snowman = turtle.Turtle() x_position = 0 y_positions = 75, 0, -100 size = 75 for y in y_positions: make_circle(snowman, x_position, y, size, "white") size = size * 1.5 # Snowman: buttons button_seperation = 25 button_y_positions = [y_positions[1]-button_seperation, y_positions[1], y_positions[1]+button_seperation] for y in button_y_positions: make_circle(snowman, x_position, y, 10, "black") # Snowman: eyes y_offset = 10 x_seperation = 15 for x in x_position-x_seperation, x_position+x_seperation: make_circle(snowman, x, y_positions[0] + y_offset, 20, "green") make_circle(snowman, x, y_positions[0] + y_offset, 10, "black") # Snowman: nose snowman.color("orange") snowman.setposition(x_position - 10, y_positions[0]-y_offset) snowman.shape("triangle") snowman.setheading(200) snowman.turtlesize(0.5, 2.5) window.tracer(0) # Ground grass = turtle.Turtle() grass.fillcolor("forest green") grass.penup() grass.setposition(-width/2, -height/2) grass.begin_fill() for _ in range(2): grass.forward(width) grass.left(90) grass.forward(70) grass.left(90) grass.end_fill() ground = turtle.Turtle() for x in range(int(-width/2), int(width/2), int(width/200)): make_circle(ground, x, -180, random.randint(5, 20), "white") text = turtle.Turtle() text.color("red") text.penup() text.setposition(-100, 170) text.write("Merry Christmas", font=( "Apple Chancery", 30, "bold"), align="center") text.setposition(130, 140) text.color("dark green") text.write("Dao", font=("Avenir", 30, "bold"), align="right") text.color("black") text.write("Bi", font=("Avenir", 30, "normal"), align="left") text.setx(50) text.write("from", font=("Apple Chancery", 20, "bold"), align="right") text.hideturtle() time_delay = 0 start_time = time.time() wind = 0 wind_delay = 5 wind_timer = time.time() wind_step = 0.1 while True: if time.time() - start_time > time_delay: make_snowball() start_time = time.time() time_delay = random.randint(*snowball_rate)/10 for snowball in list_of_snowballs: move_snowball(snowball, wind=wind) if snowball.ycor() < -height/2: snowball.clear() list_of_snowballs.remove(snowball) if time.time() - wind_timer > wind_delay: wind += wind_step if wind >= max_wind: wind_step = -wind_step elif wind <= 0: wind_step = abs(wind_step) wind_timer = time.time() wind_delay = random.randint(*wind_change)/10 window.update() turtle.done()
🌴代码剖析
这段Python代码使用Turtle图形库创建了一个简单的动画,包括下雪、雪人和圣诞主题的风景。以下是对代码的逐步分析:
-
导入库:
import turtle import random import time
- turtle:提供对象导向和过程导向的海龟图形基元。
- random:生成随机数。
- time:提供各种与时间相关的函数。
-
设置Turtle窗口:
width = 600 height = 500 window = turtle.Screen() window.setup(width, height) window.bgcolor("sky blue") window.title("Merry Christmas")
- 设置一个具有指定宽度、高度、背景颜色和标题的窗口。
-
定义雪球参数:
snowball_rate = 1, 3 snowball_size = 5, 15 wind_change = 1, 5 max_wind = 3
- 用于控制降雪速率、雪球大小、风力变化和最大风速的参数。
-
定义函数:
- make_circle:在指定位置创建一个圆形对象。
- make_snowball:创建一个新的雪球海龟并将其添加到列表中。
- move_snowball:移动雪球海龟,根据下降速度和风力更新其位置。
-
创建雪人:
snowman = turtle.Turtle() x_position = 0 y_positions = 75, 0, -100 size = 75
- 使用圆形表示雪人的身体、按钮、眼睛,以及三角形表示鼻子。
-
创建地面:
grass = turtle.Turtle() grass.fillcolor("forest green") grass.penup() grass.setposition(-width/2, -height/2) grass.begin_fill() for _ in range(2): grass.forward(width) grass.left(90) grass.forward(70) grass.left(90) grass.end_fill()
- 创建一个绿色的地面以及一些表示雪花的白色圆圈。
-
创建文本:
text = turtle.Turtle() text.color("red") text.penup() text.setposition(-100, 170) text.write("Merry Christmas", font=("Apple Chancery", 30, "bold"), align="center")
- 创建显示"圣诞快乐"的文本。
-
设置时间和风:
time_delay = 0 start_time = time.time() wind = 0 wind_delay = 5 wind_timer = time.time() wind_step = 0.1
- 设置时间和风力的参数。
-
主循环:
while True: # 生成雪球 if time.time() - start_time > time_delay: make_snowball() start_time = time.time() time_delay = random.randint(*snowball_rate)/10 # 移动雪球 for snowball in list_of_snowballs: move_snowball(snowball, wind=wind) if snowball.ycor() < -height/2: snowball.clear() list_of_snowballs.remove(snowball) # 更新风力 if time.time() - wind_timer > wind_delay: wind += wind_step if wind >= max_wind: wind_step = -wind_step elif wind <= 0: wind_step = abs(wind_step) wind_timer = time.time() wind_delay = random.randint(*wind_change)/10 window.update()
- 在主循环中,不断生成雪球、移动雪球,以及更新风力。
这段代码通过使用Turtle图形库,创建了一个简单而有趣的圣诞主题动画。以下是我的一些心得:
-
Turtle图形库: Turtle是一个很好的用于学习编程和图形设计的工具。它提供了简单易懂的API,适合初学者入门,同时也可以创建出具有趣味性的图形。
-
动画设计: 通过循环和时间控制,代码实现了雪球的不断下落、雪人的绘制,以及风力的随机变化。这种动态的设计增加了视觉上的趣味性。
-
可读性良好: 代码的结构清晰,函数的命名恰当,使得整个代码可读性很好。这对于理解代码和后续维护非常重要。
-
创意表达: 通过在屏幕上创建雪人、雪球和圣诞主题的背景,代码成功地表达了圣诞节的氛围,同时还添加了一些有趣的元素,比如风力的变化。
-
实践编程技能: 通过编写和理解这段代码,可以学到关于随机数生成、时间控制、动画设计等方面的编程技能。这对于培养实际的编程经验很有帮助。
总体而言,这段代码是一个有趣且教育性的例子,展示了如何使用Python和Turtle图形库创建简单的动画。
❄️Python制作圣诞树贺卡
🐬展示效果
🌸代码
# -*- coding: utf-8 -*- import turtle as T import random import time # 绘图区域 t = T.Turtle() # 画布大小 w = T.Screen() t.hideturtle() # 隐藏画笔 t.getscreen().tracer(5, 0) w.screensize(bg='maroon') t.left(90) t.up() t.forward(280) t.down() t.pensize(3) # 画五角星 n=100 t.color("orange","yellow") t.begin_fill() t.left(126) for i in range(5): t.forward(n/5) t.right(144) t.forward(n/5) t.left(71) t.end_fill() t.left(60) t.pensize(8) t.forward(60) t.right(20) t.right(116) t.pensize(6) # 画树冠 t.color('dark green') n=130 for i in range(6): time.sleep(0.5) a=1+i/2 t.begin_fill() t.left(90) t.forward(n*a*0.707) t.left(135) t.forward(n*a) t.left(135) t.forward(n*a*0.707) t.end_fill() t.up() t.left(90) t.forward(n*a*0.707/3) t.left(135) t.forward(n*a/6) t.left(135) t.down() # 画树干 t.up() t.right(135) t.forward(30) t.right(90) t.forward(157) t.down() t.color('saddlebrown') t.begin_fill() t.forward(80) t.right(90) t.forward(45) t.right(90) t.forward(80) t.right(90) t.forward(45) t.end_fill() t.up() t.backward(45) t.right(90) t.backward(470) t.down() # 画灯 def light(l,t): t.pensize(3) colors = ["magenta","darkorange","red","blue"] for i in range(l): time.sleep(0.2) b = 70+16*i a = b/2*random.randint(-100,100)/100 t.up() t.forward(b) t.left(90) t.forward(a) t.down() t.color("lightyellow",colors[i%4]) t.begin_fill() t.circle(10) t.end_fill() t.up() t.backward(a) t.right(90) t.backward(b) t.down() t.pensize(1) # 画雪花 def snow(m,t): for i in range(m): a = 400 - 800 * random.random() b = 600 - 800 * random.random() t.up() t.forward(b) t.left(90) t.forward(a) t.down() t.color('white') t.begin_fill() t.circle(1) t.end_fill() t.up() t.backward(a) t.right(90) t.backward(b) light(24,t) snow(600, t) # 文字 t.goto(-200,200) my_word = ("Merry Christmas") t.write(my_word,font=("Edwardian Script ITC",40,"bold")) time.sleep(0.3) t.goto(-100,50) my_word = ("and") t.write(my_word,font=("Edwardian Script ITC",50,"bold")) time.sleep(0.3) t.goto(-150,-100) my_word = ("Happy New Year") t.write(my_word,font=("Edwardian Script ITC",40,"bold")) time.sleep(0.3) t.clear() w.screensize(bg='black') t.goto(-200,0) my_word = ("Prudued by: Justine") t.write(my_word,font=("Edwardian Script ITC",45,"bold")) t.goto(0,-100) my_word = ("Dec. 24th, 2019") t.write(my_word,font=("Edwardian Script ITC",20,"bold")) time.sleep(5)
🌴代码剖析
这段代码使用Python的Turtle图形库绘制了一个圣诞树、五角星、灯光、雪花以及一些文字,并在最后展示了制作的日期和制作者信息。以下是对代码的简要分析:
-
设置绘图环境:
t = T.Turtle() w = T.Screen() t.hideturtle() t.getscreen().tracer(5, 0) w.screensize(bg='maroon')
- 创建Turtle对象和Screen对象,设置画笔属性和背景颜色。
-
绘制五角星:
n = 100 t.color("orange", "yellow") t.begin_fill() t.left(126) for i in range(5): t.forward(n / 5) t.right(144) t.forward(n / 5) t.left(71) t.end_fill()
- 使用Turtle绘制一个填充的五角星。
-
绘制圣诞树的树冠:
t.color('dark green') n = 130 for i in range(6): # 逐层绘制树冠
- 循环绘制树冠的层次,根据层次逐渐增大,绘制成树状。
-
绘制圣诞树的树干:
t.up() t.right(135) t.forward(30) t.right(90) t.forward(157) t.down() t.color('saddlebrown') t.begin_fill() t.forward(80) t.right(90) t.forward(45) t.right(90) t.forward(80) t.right(90) t.forward(45) t.end_fill()
- 绘制树干。
-
绘制灯光:
def light(l, t): # 绘制一串灯光
- 定义了一个函数,用于绘制一串灯光,每个灯光的颜色随机。
-
绘制雪花:
def snow(m, t): # 绘制雪花
- 定义了一个函数,用于绘制雪花,雪花的位置和数量随机。
-
展示文字信息:
t.goto(-200, 200) my_word = ("Merry Christmas") t.write(my_word, font=("Edwardian Script ITC", 40, "bold"))
- 在特定位置展示文字,包括"Merry Christmas"和"Happy New Year"等。
-
展示制作信息:
t.goto(-200, 0) my_word = ("Produced by: Justine") t.write(my_word, font=("Edwardian Script ITC", 45, "bold"))
- 在屏幕中央展示代码的制作者信息和日期。
-
等待5秒后清空画布:
time.sleep(5) t.clear() w.screensize(bg='black')
- 在展示信息后等待5秒钟,然后清空画布并更改背景颜色。
-
代码注释: 代码中添加了注释,使得代码更易读、易理解。
这段代码通过Turtle图形库展示了一个简单而有趣的圣诞主题图形,并且通过文字展示了制作者信息和日期。
这段代码使用Turtle图形库绘制了一个富有圣诞氛围的图形,包括五角星、圣诞树、灯光和雪花等元素。以下是我的心得:
-
创意丰富: 代码展示了作者对于圣诞节的创意和想象力。通过使用Turtle绘制五角星和树形,以及添加灯光和雪花,使整个图形充满了节日的氛围。
-
图形效果: 通过合理选择颜色、形状和绘制顺序,成功地绘制出了富有立体感的圣诞树,五角星的设计也很有特色。同时,通过随机颜色的灯光和雪花,增加了视觉上的多样性。
-
动态效果: 使用Turtle的tracer函数以及time.sleep函数,使得图形的绘制过程呈现出一定的动态效果。例如,逐层绘制圣诞树的树冠,以及依次点亮的灯光,都使图形看起来更生动。
-
字体选择: 通过选择不同的字体(“Edwardian Script ITC”),成功地展示了"Merry Christmas"和"Happy New Year"等文本,使得图形更具节日氛围。
-
清晰结构: 代码结构相对清晰,模块化程度较高,使用函数对不同元素进行绘制,提高了代码的可读性和可维护性。
-
创作者信息: 最后展示了制作者信息和日期,这是一个很好的方式来为自己的作品留下标记,并向其他人展示制作者的身份。
总体而言,这段代码不仅仅是一个简单的图形绘制,更是通过细致的设计和创意,成功地表达了圣诞节的欢乐氛围。同时,展示了Turtle图形库的灵活性和简便性。
🌸总结
这段代码通过使用Python的Turtle图形库,成功绘制了一个富有创意和节日氛围的圣诞主题图形。以下是对整体代码的总结:
-
图形元素:
- 通过Turtle绘制了五角星、圣诞树、灯光、雪花等图形元素,展现了浓厚的圣诞节氛围。
- 使用tracer函数和time.sleep函数创造了动态效果,使得图形呈现出逐步绘制的过程。
-
色彩和形状:
- 巧妙选择了颜色,如树冠的深绿色、灯光的不同随机颜色,以及雪花的白色,增添了视觉上的多样性。
- 圣诞树的形状通过逐层绘制和旋转,成功表现出树状结构,五角星的设计独特。
-
函数的使用:
- 合理使用函数对不同元素进行绘制,提高了代码的模块化和可读性。
- 分别封装了绘制灯光和雪花的函数,增加了代码的结构清晰度。
-
文本展示:
- 使用了不同的字体和字号,成功地展示了"Merry Christmas"和"Happy New Year"等文本信息,使图形更具节日氛围。
- 在最后展示了制作者信息和日期,为作品留下了标记。
-
动态效果:
- 通过适度的延时和清空画布的操作,使得整体图形呈现出动态的效果,使观赏者能够更好地感受到节日的欢乐氛围。
-
代码清晰度:
- 代码结构相对清晰,注释也有助于理解,提高了代码的可读性。
- 采用了适当的缩进和空行,使得代码布局整洁。
总的来说,这段代码成功地通过简单的图形绘制展现了圣诞节的欢快氛围,结合了创意、色彩和动态效果,展示了Turtle图形库的灵活性和便捷性。
🎅圣诞节快乐!
圣诞节快乐!愿你的圣诞充满温馨和喜悦,与亲朋好友共度美好时光。愿你在新的一年里充满幸福、健康和成功。祝福你和你的家人,平安喜乐!🎄🎅🎁
-