从天而降的Python圣诞礼物(可写字版)

2023-12-13 15:16:12

图片

"Merry Christmas!"

Want595

,赞47

图片

写在前面

图片

图片

图片

MERRY

CHRISTMAS

圣诞节就要到啦,宝子们准备怎么过呢?记得去年的圣诞节大家都秀出了自己的圣诞树,小编在各大平台看到了许多精美的圣诞树,想必今年又会有一场精彩的圣诞树大赛!作为一只爱凑热闹的兔叽,小编给大家准备了一大波圣诞福利哦,让我们从圣诞袜和圣诞帽开始吧!

软件:Python+PyCharm

环境搭建:如何下载安装PyCharm并搭建Python开发环境

运行方法:关于运行Python代码的方法以及遇到问题的解决方案(计算机小白篇)

图片

平安夜

平安夜是西方传统的一个节日,通常是在每年的12月24日晚上庆祝。这个夜晚被视为耶稣基督的诞生前夕,这也是基督教中最重要的节日之一。平安夜的庆祝活动包括参加教堂的宗教仪式、家庭聚会、晚餐和礼物交换等。

平安夜通常被认为是一个温馨、平静、祥和的节日。不仅是基督教徒,许多非基督教徒也将这一天视为一个值得庆祝的节日。在这一天,人们通常会在家中安排一顿丰盛的晚餐,与亲朋好友聚在一起,共度圣诞节的欢乐时光。

平安夜的起源可以追溯到公元4世纪,这是一个基督教传统节日的起源。据传统说法,耶稣基督的诞生发生在一个晚上,当时整个世界都非常安静和平静,这也是平安夜得名的由来。

图片

图片

圣诞节

圣诞节是西方国家传统的一个重大节日,通常在每年的12月25日举行。圣诞节庆祝的是耶稣基督的诞生。这个节日在全世界范围内都受到了热烈的欢迎,许多国家都设立了公共假日来庆祝这个节日。

圣诞节有着丰富的传统和习俗。最常见的传统莫过于圣诞老人和礼物了。据传圣诞老人是一个穿红色衣服、戴白色胡子的神圣人物,会在圣诞节的晚上送礼物给好孩子。而礼物通常是放在圣诞树下的。圣诞树是这个节日的另一个标志,是一棵被点缀着彩灯、挂饰、礼物等等的大树,不仅在家庭中挂饰,还会被放在公共场所,如购物广场、公园等等。

此外,圣诞节期间还有一些其他的传统活动如圣诞节游行。在游行中,人们会扮成圣诞老人、驯鹿、精灵等等的角色,向路人洒发糖果与礼物。在很多国家,人们还会在这一天准备一些特别的美食,如圣诞布丁、圣诞蛋糕、火鸡等等,来庆祝这个节日。

除了这些传统的习俗,圣诞节还有着意义深远的宗教意义。圣诞节是基督教中最重要的节日之一,是纪念耶稣基督的诞生。据教义,耶稣基督是上帝的儿子,他降生在马槽中,成为世界上所有基督徒的救世主。这个节日也是一个重要的家庭聚会时间,人们会和家人朋友一起庆祝这个节日,分享快乐和爱。

总之,圣诞节是一个富有传统和文化的节日,不仅仅是一个基督教的节日,更是一个广泛而具有包容性的节日。它是一个庆祝爱、家庭和团结的节日,充满了美好的祝福和希望。

图片

图片

圣诞礼物

图片

完整程序

图片

import turtle as tuimport random as raimport math
word = "Merry Christmas!" # 祝福语(要写的字)
tu.setup(1.0, 1.0, None, None)tu.screensize(1.0, 1.0)    #设置画布大小tu.bgcolor('black')  #设置画布颜色tu.title("?")t = tu.Turtle()t.screen.delay(0)t.ht()               #隐藏画笔
class Hat():            #帽子类    def __init__(self):   #初始化        self.x=ra.randint(-1000,1000)      #帽子在画布中的x坐标位置        self.y=ra.randint(500,1000)        #帽子在画布中的y坐标位置        self.r=ra.uniform(0.5,1)        self.k=ra.randint(-50,50)        self.f = ra.uniform(-3.14, 3.14)        self.speed = ra.randint(3, 8)
    def draw(self):        t.penup()                  #提笔        t.goto(self.x,self.y)      #设置帽子在画布中的初始坐标        t.pendown()                #落笔        t.seth(-20 + self.k)        t.pensize(2)        t.pencolor("white")        t.begin_fill()        t.fillcolor("white")        t.fd(30 * self.r)        t.circle(4 * self.r, 180)        t.fd(30 * self.r)        t.circle(4 * self.r, 180)        t.end_fill()        t.seth(75 + self.k)        t.begin_fill()        t.fillcolor("red")        for i in range(5):            t.fd(6 * self.r)            t.right(20)        t.seth(-10 + self.k)        for i in range(5):            t.fd(8 * self.r)            t.right(15)        t.seth(145 + self.k)        for i in range(5):            t.fd(5 * self.r)            t.left(2)        t.seth(90 + self.k)        for i in range(5):            t.fd(1 * self.r)            t.left(2)        t.seth(-90 + self.k)        for i in range(4):            t.fd(4 * self.r)            t.right(6)        t.seth(161 + self.k)        t.fd(30 * self.r)        t.end_fill()
    def change(self):        if self.y >= -500:            #当帽子还在画布中时            self.y -= self.speed     #设置上下移动速度            self.x += self.speed * math.sin(self.f)    #设置左右移动速度            self.f += 0.1            #可以理解成标志,改变左右移动的方向        else:                        #当帽子漂出了画布时,重新生成一个袜子            self.r = ra.uniform(0.5,1)            self.x = ra.randint(-1000,1000)            self.y = 500            self.f = ra.uniform(-3.14,3.14)            self.speed = ra.randint(3,8)            self.k = ra.uniform(-50,50)


class Sock():            #袜子类    def __init__(self):   #初始化        self.x = ra.randint(-1000,1000)      #袜子在画布中的x坐标位置        self.y = ra.randint(500,1000)                            #袜子在画布中的y坐标位置        self.r = ra.uniform(0.5,1)        self.s = ra.randint(-50,50)        self.f = ra.uniform(-3.14, 3.14)        self.speed = ra.randint(3, 8)
    def draw(self):        t.penup()                  #提笔        t.goto(self.x,self.y)      #设置袜子在画布中的初始坐标        t.pendown()                #落笔        t.seth(self.s)        t.pensize(2)        t.pencolor("white")        t.begin_fill()        t.fillcolor("white")        t.fd(25 * self.r)        t.circle(4 * self.r, 180)        t.fd(25 * self.r)        t.circle(4 * self.r, 180)        t.end_fill()        t.begin_fill()        t.fillcolor("red")        t.right(90)        t.fd(20 * self.r)        t.left(-100)        t.fd(5 * self.r)        t.circle(7 * self.r, 180)        t.fd(15 * self.r)        t.circle(5 * self.r, 90)        t.fd(30 * self.r)        t.end_fill()
    def change(self):        if self.y >= -500:            #当袜子还在画布中时            self.y -= self.speed     #设置上下移动速度            self.x += self.speed * math.sin(self.f)    #设置左右移动速度            self.f += 0.1            #可以理解成标志,改变左右移动的方向        else:                        #当袜子漂出了画布时,重新生成一个袜子            self.r = ra.uniform(0.5,1)            self.x = ra.randint(-1000,1000)            self.y = 500            self.f = ra.uniform(-3.14,3.14)            self.speed = ra.randint(3,8)
class Star():            #星星类    def __init__(self):   #初始化        self.r=1       #星星的初始大小        self.x=ra.randint(-1000,1000)      #星星在画布中的x坐标位置        self.y=ra.randint(-500,500)        #星星在画布中的y坐标位置        self.c="gold"           #在星星的颜色列表中随机选择一个颜色    def draw(self):                        #画星星的函数        t.pensize(1)               #设置画笔大小        t.penup()                  #提笔        t.goto(self.x,self.y)      #设置星星在画布中的初始坐标        t.pendown()                #落笔        t.color(self.c)            #设置星星的外框颜色        for i in range(5):         #循环画星星            t.forward(self.r)            t.right(144)            t.forward(self.r)            t.left(72)    def change(self):              #改变星星的大小(星星不断增大)        if self.r<=10:             #星星的最大大小不超过10            self.r+=0.5          #递增        else:                      #超过最大大小就重新画星星            self.r = 1            self.x = ra.randint(-1000, 1000)            self.y = ra.randint(-500, 500)            self.c = "gold"
class Snow():    #雪花类    def __init__(self):        self.r = ra.uniform(2,3)       #雪花的半径        self.x = ra.randint(-1000,1000)   #雪花的横坐标        self.y = ra.randint(500,1500)     #雪花的纵坐标        self.f = ra.uniform(-3.14,3.14)   #雪花左右移动呈正弦函数        self.speed = ra.randint(10,15)     #雪花移动速度        self.color = "white"    #雪花的颜色        self.outline = 2                #雪花的大小    def draw(self):                #画每个雪花        x=self.r                   #雪花的半径        t.pensize(self.outline)    #雪花的大小        t.penup()                  #提笔        t.goto(self.x,self.y)      #随机位置        t.pendown()                #落笔        t.color(self.color)        #雪花颜色        for i in range(6):        #循环画六个雪花瓣            t.forward(x*5)            t.backward(x*2)            t.left(60)            t.forward(x*2)            t.backward(x*2)            t.right(120)            t.forward(x*2)            t.backward(x*2)            t.left(60)            t.backward(x*3)            t.right(60)    def change(self):                    #雪花移动函数        if self.y >= -500:            #当雪花还在画布中时            self.y -= self.speed     #设置上下移动速度            self.x -= self.speed * math.sin(self.f)    #设置左右移动速度            self.f -= 0.1            #可以理解成标志,改变左右移动的方向        else:                        #当雪花漂出了画布时,重新生成一个雪花            self.r = ra.uniform(2,3)            self.x = ra.randint(-1000,1000)            self.y = 500            self.f = ra.uniform(-3.14,3.14)            self.speed = ra.randint(10,15)            self.color = "white"            self.outline = 2
Christmas=[]              #圣诞礼物列表for i in range(66):           #循环增加圣诞礼物    Christmas.append(Hat())   #圣诞帽    Christmas.append(Sock())  #圣诞袜    # Christmas.append(Star())  #星星    Christmas.append(Snow())  #雪花    Christmas.append(Snow())while True:                   #开始画圣诞礼物    tu.tracer(0)    t.clear()    t.penup()    t.goto(-366,0)    t.pendown()    t.write(word, font=(        "Comic Sans MS", 66, "bold"))  # 开始写字,"Merry Christmas!"为要写的字,"Comic Sans MS"为字体,66为字的大小,bold为粗体(可自行修改要写的字)
    for i in range(166):        Christmas[i].draw()        Christmas[i].change()    tu.update()

tu.mainloop()

图片

具体分析

这段代码是用turtle库绘制圣诞元素的代码。整个代码包含了四个类:帽子类(Hat)、袜子类(Sock)、星星类(Star)、雪花类(Snow)。同时,代码还创建了一个圣诞礼物列表(Christmas),里面分别添加了帽子、袜子、星星、雪花等元素,通过循环遍历并调用它们的绘制方法和移动方法来实现不断出现和消失的效果。

首先,代码先使用了turtle库创建了一个画布,并对画布进行设置,包括画布大小、背景色和标题。

接着,定义了四个类来分别实现帽子、袜子、星星和雪花的绘制和移动方法。这些类都拥有draw()方法和change()方法,其中draw()方法用于绘制元素,而change()方法则用于移动元素。这里,draw()方法的实现主要是通过turtle库的各种绘制方法来绘制不同形状的元素。change()方法的实现则是通过动态改变元素在画布上的坐标来实现元素的移动效果。

然后,代码创建了一个圣诞礼物列表(Christmas),并通过循环来不断添加圣诞元素。循环中每个元素都会调用自己的draw()方法和change()方法来绘制和移动。

最后,在主函数中,代码先使用turtle库将"Merry Christmas!"这个字画出来,然后进入主循环,不断调用圣诞元素的draw()方法和change()方法,使它们在画布上动起来。同时,使用tu.update()函数实时更新画面,使得画面不断刷新,形成动态效果。

总的来说,这段代码通过turtle库绘制了一些简单的圣诞元素,同时实现了元素的动态效果,给人带来了一种欢乐的气氛。同时,这段代码也展示了如何通过类的封装和继承来实现代码的模块化,提高了代码的可读性和可维护性。

文章来源:https://blog.csdn.net/m0_74433188/article/details/134969837
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。