python代码~创意圣诞树

news2024/11/18 3:31:14

2022年圣诞节到来啦,很高兴这次我们又能一起度过~

圣诞节(Christmas)本身是一个宗教节,用来庆祝耶稣的诞辰,因而又名耶诞节

Hope all your Christmas dreams come true!   

愿你所有的圣诞梦想都成真!   

Hope you enjoy the happiness of Christmas and all the trimmings.   

祝你享尽圣诞佳节的快乐和圣诞的礼品。   

Warm hearted wishes for an old fashioned Christmas and a happy New Year filled with all your favorite things.   

传统佳节之际,献上圣诞的殷殷祝福,祝新年万事如意!   

I wish you a merry Christmas. All affection and best wishes to you and yours.   

以我所有的爱心与真诚祝你及全家圣诞快乐。   

In the season of joy I present my sincere wishes and kind thoughts. May the kind of Christmas outshine all the rest.   

在这欢乐的时节给你我最真的祝福和亲切的思念,愿你今年的圣诞比往年更璀璨。   

May the Christmas be a time of laughter and real enjoyment for you. Best wishes.   

愿圣诞不仅是你欢笑的时刻,更是你欣喜的日子。祝福你。   

May the glow of Christmas candle fill your heart with peace and pleasure and make your New Year bright. Have a love filled Christmas and New Year!   

愿圣诞的烛光带给你祥和与喜悦,祝你的圣诞和新年充满爱。   

May the bright and festive glow of Christmas candle warm the days all the year through. Hoping you will have a wonderful time enjoying Christmas Day and wishing you a New Year that is happy in every way.   

愿明亮喜庆的圣诞烛光温暖一年中的每个日日夜夜,祝你欢欢喜喜度圣诞,高高兴兴过新年!

一、前言

圣诞节快到了,是不是想用python画一个可爱的圣诞树,我在各大网站都查了一下,都不太美观,然后我就学习了一下别人的代码改写了一下,自己加了一些东西,弄的好看一些了,给大家开源出来,欢迎大家指正学习,也欢迎转载,请注明出处哦~

二、创意名

这个圣诞你很快乐,因为由我为你亲手绘制的圣诞树。

三、效果展示

 

四、实现步骤

一、Turtle是什么?

Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。

1.引入库

from turtle import *
from random import *
import math

2.turtle绘图的基础知识

(1) 画笔运动命令

在这里插入图片描述

 (2) 画笔控制命令

在这里插入图片描述

(3) 全局控制命令

在这里插入图片描述 

在这里插入图片描述 

 

五、编码实现

完整代码如下所示: 

from turtle import *
from random import *
import math


# 绘图方法
def Rightdraw(Range, Fd, Right):
    for i in range(Range):  # Range循环次数
        fd(Fd)  # 向前Fd个距离
        right(Right)  # 在当前行进方向再向右偏转Right度


def Leftdraw(Range, Fd, Left):
    for i in range(Range):  # Range循环次数
        fd(Fd)  # 向前Fd个距离
        left(Left)  # 在当前行进方向再向右偏转Right度


# 背景改为黑色
screensize(bg='black')


# 重设海龟位置
def changeMypos(x, y, range=heading(), Fd=0):
    penup()
    goto(x, y)
    seth(range)
    fd(Fd)
    pendown()


def drawBranch(x, y, size=1):
    changeMypos(x, y)
    Leftdraw(6, 3, 9)
    seth(0)
    Rightdraw(6, 3, 9)
    seth(0)
    fd(6)


# 画五角星
def drawStar(x, y, Range, size):
    pensize(1)
    color("red", "yellow")
    begin_fill()
    changeMypos(x, y, Range)
    for i in range(5):  # 画五角星
        forward(10 * size)
        right(144)  # 五角星的角度
        forward(10 * size)
        left(72)  # 继续换角度
    end_fill()
    right(126)


# 绘制雪花
def drawSnow():
    hideturtle()
    speed(0)
    pencolor("white")
    pensize(2)
    for i in range(100):  # 雪花数量
        changeMypos(randint(-248, 248), randint(-100, 248))
        petalNumber = 6  # 雪花花瓣数为6
        snowSize = int(randint(2, 10))
        for j in range(petalNumber):
            fd(snowSize)
            backward(snowSize)
            right(360 / petalNumber)


# 圣诞袜子
def drawSock(x, y, range, size=1):
    # 绘制袜子的白边
    pensize(1)
    changeMypos(x, y, range)
    color("black", "white")
    begin_fill()
    fd(20 * size)
    circle(3 * size, 180)
    fd(20 * size)
    circle(3 * size, 180)
    end_fill()

    # 绘制袜子的下半部分
    color("white", "red")
    begin_fill()
    startx = x + 2 * size * math.cos(math.radians(range))
    starty = y + 2 * size * math.sin(math.radians(range))
    finalx = x + 18 * size * (math.cos(math.radians(range)))
    finaly = y + 18 * size * (math.sin(math.radians(range)))
    changeMypos(startx, starty, range - 90)
    fd(20 * size)  # 圆弧距离白边40
    seth(180 + range)
    fd(5 * size)  # 向袜子头延伸10
    circle(7 * size, 180)  # 袜子头处的半圆形
    fd(21 * size)  # 袜子宽42
    seth(90 + range)
    d = distance(finalx, finaly)  # 找到袜子底部与白边的距离
    fd(d)
    seth(range + 180)
    fd(16 * size)
    end_fill()


# 圣诞帽
def drawHat(x, y, range, size=1):
    # 绘制帽白边
    pensize(1)
    changeMypos(x, y, range)
    color("white", "white")
    begin_fill()
    fd(20 * size)
    circle(-3 * size, 180)
    fd(20 * size)
    circle(-3 * size, 180)
    end_fill()
    # 绘制帽子上半部分
    color("white", "red")
    begin_fill()
    startx = x + 2 * size * math.cos(math.radians(range))
    starty = y + 2 * size * math.sin(math.radians(range))
    finalx = x + 18 * size * (math.cos(math.radians(range)))
    finaly = y + 18 * size * (math.sin(math.radians(range)))
    changeMypos(startx, starty, range + 90)
    Rightdraw(18, 2 * size, 7)
    seth(190)
    Leftdraw(9, 2 * size, 8)
    goto(finalx, finaly)
    goto(startx, starty)
    end_fill()
    # 绘制圣诞帽上的小球
    changeMypos(startx, starty, range + 90)
    Rightdraw(18, 2 * size, 7)
    begin_fill()
    color("white", "white")
    circle(-2.5 * size)
    end_fill()


# 绘制彩带
def drawRibbon(x, y, range, size):
    begin_fill()
    color("red", "red")
    seth(range + 40)
    fd(15 * size * math.tan(math.radians(range + 40)))
    seth(range + 90)
    fd(20 / 3 * size)
    seth(range - 140)
    fd(15 * size * math.tan(math.radians(range + 40)))
    seth(range - 90)
    fd(20 / 3 * size)
    end_fill()


# 圣诞糖果
def drawCandy(x, y, range, size):
    # 绘制糖体
    pensize(1)
    changeMypos(x, y, range)
    color("white", "white")
    begin_fill()
    startx = x + 2 * size * math.cos(math.radians(range))
    starty = y + 2 * size * math.sin(math.radians(range))
    finalx = x + 8 * size * (math.cos(math.radians(range)))
    finaly = y + 8 * size * (math.sin(math.radians(range)))
    changeMypos(startx, starty, range + 90, 40 * size)
    circle(-40 / 3 * size, 180)
    circle(-8 / 3 * size, 180)
    circle(22 / 3 * size, 180)
    goto(finalx, finaly)
    goto(startx, starty)
    end_fill()
    # 绘制下面三条彩带
    color("white")
    changeMypos(startx, starty, range + 90)
    fd(10 / 3 * size)
    drawRibbon(xcor(), ycor(), range, size)
    changeMypos(xcor(), ycor(), range + 90, 13.3 * size)
    drawRibbon(xcor(), ycor(), range, size)
    changeMypos(xcor(), ycor(), range + 90, 13.3 * size)
    drawRibbon(xcor(), ycor(), range, size)
    # 绘制弧线段的彩带
    changeMypos(startx, starty, range + 90, 40 * size)
    circle(-13.3 * size, 55)
    x1 = xcor()
    y1 = ycor()
    begin_fill()
    circle(-13.3 * size, 80)
    right(75)
    fd(6.3 * size)
    right(115)
    circle(7 * size, 85)
    goto(x1, y1)
    end_fill()


setup(500, 500, startx=None, starty=None)
title("Merry Christmas")
speed(0)
pencolor("green")
pensize(10)
hideturtle()
changeMypos(0, 185, 0)

# shape(name= "classic")

# # 树顶层
seth(-120)
Rightdraw(10, 12, 2)
changeMypos(0, 185, -60)

Leftdraw(10, 12, 2)

changeMypos(xcor(), ycor(), -150, 10)

# # 第一层的波浪
for i in range(4):
    Rightdraw(5, 7, 15)
    seth(-150)
    penup()
    fd(2)
    pendown()

# # 树二层
changeMypos(-55, 70, -120)
Rightdraw(10, 8, 5)

changeMypos(50, 73, -60)
Leftdraw(10, 8, 5)

changeMypos(xcor(), ycor(), -120, 10)
seth(-145)
pendown()

# # 第二层的波浪
for i in range(5):
    Rightdraw(5, 9, 15)
    seth(-152.5)
    penup()
    fd(3)
    pendown()

# 树三层
changeMypos(-100, 0, -120)
Rightdraw(10, 6.5, 4.5)

changeMypos(80, 0, -50)
Leftdraw(10, 6, 3)

changeMypos(xcor(), ycor(), -120, 10)
seth(-145)

# # # 第三次的波浪
for i in range(6):
    Rightdraw(5, 9, 15)
    seth(-152)
    penup()
    fd(3)
    pendown()

# # 树四层
changeMypos(-120, -55, -130)
Rightdraw(7, 10, 4)

changeMypos(100, -55, -50)
Leftdraw(7, 10, 5)

changeMypos(xcor(), ycor(), -120, 10)
seth(-155)

# # 第四层的波浪
for i in range(7):
    Rightdraw(5, 9, 13)
    seth(-155)
    penup()
    fd(3)
    pendown()

# 树根
changeMypos(-70, -120, -85)
Leftdraw(3, 8, 3)

changeMypos(70, -120, -95)
Rightdraw(3, 8, 3)

changeMypos(xcor(), ycor(), -170, 10)
Rightdraw(10, 12, 2)

# 画树枝
drawBranch(45, -80)
drawBranch(-70, -25)
drawBranch(-20, 40)

# 添加挂件
drawHat(-25, 175, -10, 2.5)
drawCandy(-75, -50, -10, 1)  # -10别动了,这个绘制有点烦,我没做转角功能
drawCandy(10, 40, -10, 1.2)
drawStar(110, -90, 80, 1)
drawStar(-120, -100, 50, 1)
drawStar(-90, -50, 20, 1)
drawStar(90, -25, 30, 1)
drawSock(10, -35, -10, 2)
drawSock(-40, 100, 10, 1)
drawStar(-20, 40, 30, 1)
drawStar(10, 120, 90, 1)

# 打印祝福语
color("skyblue", "blue")  # 定义字体颜色
penup()
goto(0, -230)
write("Merry Christmas", align="center", font=("Comic Sans MS", 60, "bold"))  # 定义文字、位置、字体、大小

# 调用下雪的函数
drawSnow()

done()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/113081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Express 基本使用(简)

前一篇内容讲到Express框架的安装以及对Express项目的目录文件有一定的认识了解之后,使用Express创建了最基本的一个Web服务器,接下来进行对Express框架的一些内容来做一个基本的使用; 创建 Web 服务器 node 或 nodemon 执行app.js文件&#…

贪心法算法

目录 一 算法简介 1)算法案例引入 2)算法思想 3)算法概念 4) 算法求解的问题的特征 5)算法应用 二 算法常见问题 1)活动安排问题(区间调度问题) 今年暑假不AC 2&#xff…

【QT】信号与槽

信号与槽 信号(Signal) 与 槽(Slot) 是Qt中对象之间的通信方式,可以用一个简单的栗子说明:当我们想要开灯时,按下开关发出指令,这就是信号;而灯泡接收到电流变化,发出光亮,这就是响应(槽)。 我…

通过cmd指令创建vue项目

通过cmd指令创建vue项目 基础材料: 已安装node.js 已安装 npm(安装node.js后会自带安装npm) 首先通过node –v和npm –v确保他们都安装了,能够看见版本号就表示ok 然后通过指令安装vue脚手架 npm install -g vue/cli5.0.8 安…

QTableView表格控件区域选择-自绘选择区域

一、概述 最近优化了一个小功能,主要是模仿excel相关的操作,觉得还挺不错的,因此在这里进行了整理,分享给有需要的朋友。今天主要是说一下区域选择这项功能,Qt自带的表格控件是具有区域选择功能的,但是他并…

【Linux技术专题系列】「必备基础知识」一起探索(su、sudo等相关身份提权/身份切换机制)

内容简介 Linux技术专题,主要介绍相关,针对于Linux开发和知识体系的必备开发技能以及基础常识,是开发者必备的知识体系和方法论。 什么是用户、用户组 Linux用户 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资…

如何制作mp3音频文件?分享制作mp3的简单方法

MP3 对每个人来说都不是一个陌生的名字,因为它是全球排名第一的主流音乐格式。听过上千首MP3歌曲,你知道自己可以制作MP3文件吗?如果答案是否定的,那么您很幸运能找到这篇文章,因为它将通过向您介绍一个免费且简单的解…

产险精算GLM案例2

这是北美产险精算学会CAS网站上的一个案例,对案例略作修改后进行验证。 原始数据是一个简单的分组数据: ClassAOITerrExposureClaims1Low1762Medium1108443High11791054Low2130625Medium2126826High21291207Low3143848Medium31261019High34046 &#x…

从入门到项目实战 - Vue 列表渲染

Vue 列表渲染上一节:《Vue 条件渲染 》| 下一节:《Vue 数据的单向和双向绑定 》jcLee95 邮箱 :291148484163.com CSDN 主页:https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 本文地址:https://blog.c…

【Linux技术专题系列】「必备基础知识」一起探索(用户、用户组与文件权限)

内容简介 Linux技术专题,主要介绍相关,针对于Linux开发和知识体系的必备开发技能以及基础常识,是开发者必备的知识体系和方法论。 什么是用户、用户组 Linux用户 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资…

【OpenFeign】【源码+图解】【五】创建FeignClient接口的代理(上)

【OpenFeign】【源码图解】【四】FeignClient实例工具类ReflectiveFeign 目录6. 创建FeignClient接口的代理6.1 收集方法的元数据6.1.1 方法上基础信息6.1.2 方法所在类的注解信息6.1.3 方法上的注解信息6.1.3.1 uri6.1.3.2 produces6.1.3.3 consumes6.1.3.4 headersRequestMap…

认识 TEE OS

了解 TEE OS 关于本文,是一篇会议纪要,会议主题是《从 Linux Kernel 角度看 TEE》,主讲人是周贺贺。它适用于嵌入式系统开发/驱动开发/内核设计/安全业务设计从业者,目的是让自己掌握 TEE 基本概念,知道大系统软件架构…

目标检测之YOLOv1算法分析

网络结构 卷积层池化层全连接层 输入448∗448448*448448∗448大小的图片 输出7∗7∗307*7*307∗7∗30的张量 30维张量包括20个对象的概率,2个bounding box的置信度及其位置(一个bounding box位置信息需要四个值,两个bounding box总需要8个…

【C/C++】排序讲解,C语言实现各种排序

这篇文章会从思路到实现到分析时间空间复杂度,一次性搞懂各种排序 有帮助的话点个赞收藏一下不迷路啊 如果对时间空间复杂度还不熟悉的请去看 时间 空间复杂度 本文章不会讲堆排序,这部分内容会马上单写一篇博客介绍,和堆的和一些更复杂的问题…

C++基础之核心3

C核心编程 本阶段主要针对C面向对象编程技术做详细讲解,探讨C中的核心和精髓。 1 内存分区模型 C程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量…

海格里斯HEGERLS标准解析|夹抱式四向穿梭车医用行业现代物流解决方案

众所周知,随着当前电商、医用、新零售等领域的快速发展,各大中小企业对于存储的要求越来越高,为让仓储货架、仓储设备、仓储配件等更具有行业的适配性,传统固定的穿梭车已不能满足对不同尺寸料箱的处理。为此,河北沃克…

二叉树题型

目录 二叉数遍历迭代法 1.1前序遍历 1.2中序遍历 1.3后续遍历 二叉树最小深度 二叉树所有路径 中序后序构造二叉树 验证二叉搜素树 二叉数遍历迭代法 1.1前序遍历 前序遍历顺序:根—左—右; 解法1:用栈来进行中间过程处理&#xf…

Babel和devServer | Webpack

文章目录Babel和devServerbabelbabel命令行使用babel-loaderVue源码的打包VSCode对SFC文件的支持vue-loaderdevServerBabel和devServer babel babel命令行使用 babel-loader Vue源码的打包 VSCode对SFC文件的支持 vue-loader devServer

一键可以轻松替换人物背景图,效果出乎意料的好(附 Python 代码)

最近发现 BackgroundMattingV2 项目的一些使用上的小缺陷,但是他却可以做到头发丝精细的抠图效果。我将项目稍微魔改了一下,让他在可以选择单一图片的基础上,可以把抠好的图片贴在自定义的背景图上,这样就可以让照片中的人物&…

使用Tomcat时出现Access Error: 404 -- Not Found的解决办法

当时出现这种情况很迷惑,错误提示如下 突然想到大二上学模电的时候安装过multisim,这个软件的某些不必要的服务占用了8080端口(恼),出现这种情况应该是和Tomcat默认的端口冲突了。 于是就有了解决思路: …