Python画一个圣诞树

用python画一个圣诞树

可以使用Python中的turtle模块来画一个圣诞树。

下面是一段示例代码:

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(80):  # 雪花数量changeMypos(randint(-248, 248), randint(-100, 248))petalNumber = 6  # 雪花花瓣数为6snowSize = 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)  # 圆弧距离白边40seth(180 + range)fd(5 * size)  # 向袜子头延伸10circle(7 * size, 180)  # 袜子头处的半圆形fd(21 * size)  # 袜子宽42seth(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)# 树顶层
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)
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("dark red", "red")  # 定义字体颜色
penup()
goto(0, -230)
write("Merry Christmas", align="center", font=("Comic Sans MS", 40, "bold"))  # 定义文字、位置、字体、大小# 调用下雪的函数
drawSnow()done()

运行上述代码后会在绘制好的圣诞树下面显示"Merry Christmas!"字样。

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

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

相关文章

ADS学习笔记(一)——更新中

在ADS中,信号上升时间为信号从0~100%所用的时间,而实际上定义的上升边均为10%~90%,所以可以认为上升边=0.8*ADS设置上升时间。 一、终端开路及短路的反射信号 1.仿真条…

【Docker】except yum.Errors.RepoError, e:-yum-config-manager --add-repo报错

问题 [rootitfuture ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoFile "/usr/bin/yum-config-manager", line 135except yum.Errors.RepoError, e:^ SyntaxError: invalid syntax原因: linux 系统中…

Transport endpoint is not connected

问题背景 今早打开服务器一看发现昨天挂上去的数据预处理脚本中断了,报错如下: python3: cant open file preprocess_data.py: [Errno 107] Transport endpoint is not connected之前从来没有遇到过这种问题,于是顺手执行了 cd ..&#xff…

测试工具Jmeter:设置中文界面

首先我们打开Jmeter所在的文件,进入bin目录,打开Jmeter.properties: 打开后找到languageen: 改为zh_CN: 保存关闭,然后再打开Jmeter: 英文并不会显得高级,能做到高效的性能测试才是高级的。

C语言中关于函数和数组的理解

函数 函数由函数头和函数体组成&#xff0c;函数头包括函数名、返回值类型和参数列表&#xff0c;函数体包括函数执行的语句块。 #include <stdio.h> int sum(int x,int y) //定义函数的作用以及格式 {int z;zxy; //作用是把两个整数相加…

【taro react】---- 解决 taro 编译 H5 姓名脱敏导致的 iOS 部分低版本白屏问题

1. 姓名脱敏方法 判断传入字段是否是字符串;将字符串除第一个字符后的其他字符全部替换为 *。const replaceUserName = (name) => {if(isTypingMathods.isString(name)){return name.replace(/(?<=.)./g,*)}return name }2. 问题 编译后在浏览器和安卓机没有发现任何问…

[THUPC 2023 决赛] 烂柯杯

题目背景 却说庞统迤逦前进&#xff0c;抬头见两山逼窄&#xff0c;树木丛杂&#xff1b;又值夏末秋初&#xff0c;枝叶茂盛。庞统心下甚疑&#xff0c;勒住马问&#xff1a;“此处是何地&#xff1f;”数内有新降军士&#xff0c;指道&#xff1a;“此处地名落凤坡。”庞统惊…

视觉增强RTK论文(1)—— GNSS-Stereo-Inertial SLAM for Arable Farming

文章目录 摘要方法标记ORB-SLAM3GNSS-Stereo-Inertial融合实验结果代码摘要 农业任务自动化速度的加快要求现场机器人采用高精度和鲁棒的定位系统。同时定位和映射(SLAM)方法不可避免地会在探索性轨迹上积累漂移,并且主要依赖于位置重新访问和循环闭合来保持一个有界的全局…

Wordpress插件WP-Statistics无法识别来访IP国家和城市处理方法

Wordpress插件WP-Statistics&#xff0c;可以识别网站访问者的IP物理地址&#xff0c;统计出城市、国家&#xff0c;但最近发现都显示unknown/未知&#xff1a; 更新GeoIP数据库到最新还是不行&#xff1a; 偶然找到了之前能用的数据库&#xff0c;恢复回去&#xff0c;竟然大…

12.1 知识回顾(过滤器、 模型层)

一、过滤器 1.1 编写步骤 1 注册app2 在某个app下&#xff1a;创建templatetags模块(模块名只能是templatetags&#xff09;3 在包下写一个py文件&#xff0c;随便命名 在py文件中&#xff1a;写入 from django import templateregister template.Library() &#xff08;注&am…

第5章-第2节-Java里的匿名对象和构造方法

1、匿名对象 匿名&#xff1a;没有名字 生活层面&#xff1a;匿名投票、匿名信... 程序层面&#xff1a; 有名对象和匿名对象 有名对象&#xff1a; 理解&#xff1a;有名字的对象 模板&#xff1a; 数据类型 对象名 new 数据类型(...); 匿名对象&#xff1a; 理…

P8736 [蓝桥杯 2020 国 B] 游园安排

题目描述 L \mathrm{L} L 星球游乐园非常有趣&#xff0c;吸引着各个星球的游客前来游玩。小蓝是 L \mathrm{L} L 星球 游乐园的管理员。 为了更好的管理游乐园&#xff0c;游乐园要求所有的游客提前预约&#xff0c;小蓝能看到系统上所有预约游客的名字。每个游客的名字由一…

dell服务器 R740xd安装windows server 2019过程记录

公司有两台dell服务器型号是R740xd&#xff0c;增加了存储&#xff0c;更新系统到windows server 2019标准版。 查找了网上的系统安装方式&#xff0c;都没有实践成功&#xff0c;做一下工作记录&#xff0c;给大家做参考。 网络搜索到的两种方式&#xff0c;进行安装 &#x…

如何通过ssh管道传输文件到ubuntu

如何在window系统中&#xff0c;通过ssh将指定的文件传输到ubuntu中呢&#xff1f; 比较常用的有以下种方式&#xff1a; 共享文件夹借助工具&#xff0c; FileZillaMobaxtermWinSCPXshell XFTP samba互传PuTTY pscp 今天主要分享一个使用python脚本搭建的一个&#xff0c;…

Oracle定时任务的创建与禁用/删除

在开始操作之前&#xff0c;先从三W开始&#xff0c;即我常说的what 是什么&#xff1b;why 为什么使用&#xff1b;how 如何使用。 一、Oracle定时器是什么 Oracle定时器是一种用于在特定时间执行任务或存储过程的工具&#xff0c;可以根据需求设置不同的时间段和频率来执行…

HarmonyOS后台代理提醒

后台代理提醒 简介 随着生活节奏的加快&#xff0c;我们有时会忘记一些重要的事情或日子&#xff0c;所以提醒功能必不可少。应用可能需要在指定的时刻&#xff0c;向用户发送一些业务提醒通知。例如购物类应用&#xff0c;希望在指定时间点提醒用户有优惠活动。为满足此类业…

本地运行vue脚手架 从下载node开始到创建vue

vue2node 1.安装node vue2版本我node一般使用的是14版本左右 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f886442c20114e62aef8113425e34ad2.pngnode官网 假如我node版本过低 你就找到控制面板 找到node卸载掉 我一般下载两个版本 安装vue cli vuecl…

BurpSuite抓不到本地包

目录 前言 一、方法一 二、方法二 三、方法三 四、方法四 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da;。 &#x1f…

基础数据结构(1):链表

在学习算法时&#xff0c;发现用什么数据结构来存储数据是很重要的&#xff0c;所以学习数据结构也是必须的&#xff0c;先从基础数据结构&#xff1a;数组&#xff0c;字符串&#xff0c;链表&#xff0c;栈&#xff0c;队列&#xff0c;树&#xff0c;矩阵&#xff0c;邻接表…

利用虚继承解决菱形继承(钻石继承)的问题 学习笔记

菱形继承概念&#xff1a; 两个派生类继承同一个基类 又有某个类同时继承两个派生类 这种继承又被称为菱形继承&#xff0c;或者钻石继承 定义一个基类Animal&#xff0c;两个派生类Sheep、Camal&#xff0c;SheepCame继承于两个派生类 class Animal { public:int m_Age; }…