python画一个圣诞树实现示例
作者:极客飞虎 发布时间:2021-06-12 03:54:53
前言
我们上一篇博客,给大家展现了一个动态的爱心。今天,我们给大家画一个圣诞树,我们一起来看看效果吧。
效果展示
我们先来看看最终的效果看看我们画的圣诞树怎么样吧。如果,感觉不错,我们一起来实现吧。
功能模块
我们先看看,实现这个效果,需要哪些模块吧。大家先准备好这些模块。
import turtle as t
from turtle import *
import random as r
我们导入turtle模块,这个模块提供了一些绘图函数,比如turtle.circle()和turtle.forward()。我们导入turtle模块的子模块,这些子模块提供了更多的绘图函数,比如turtle.circle()和turtle.forward(),这些函数与turtle模块中的函数名称不同,但是它们具有相似的功能。导入random模块的目的,这个模块提供了一些随机数生成函数,比如random.randint()和random.uniform()。
n = 100.0
speed("fastest")
screensize(bg='pink')
left(90)
forward(3*n)
color("orange", "yellow")
begin_fill()
left(126)
我们这段代码是使用turtle库来绘制一个简单的圣诞树,包括树干、叶子和五角星。其中,变量n
表示树的高度,变量speed
用于设置绘图速度,变量screensize
用于设置画布大小,变量left
用于设置海龟的方向,变量forward
用于设置海龟的移动距离,变量color
用于设置画笔的颜色和样式,变量begin_fill
用于开始填充颜色,变量left
用于设置海龟的方向。
def drawlight():
if r.randint(0, 30) == 0:
color('tomato')
circle(6)
elif r.randint(0,30) == 1:
color('orange')
circle(3)
else:
color('dark green')
color("dark green")
backward(n*4.8)
变量drawlight()
用于实现随机绘制灯光的功能,根据随机数的不同,绘制不同颜色的圆形。我们使用了r.randint()
函数来生成随机数,并根据随机数的值来设置颜色。具体来说,如果随机数为0,则绘制红色的圆形;如果随机数为1,则绘制橙色的圆形;否则,绘制绿色的圆形。
def tree(d, s):
if d <= 0: return
t.pensize(3)
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)
我们这里使用递归方式来构建一棵二叉树。具体来说,tree(d, s)
函数接受两个参数d
和s
,表示树的高度和当前节点的高度。函数首先判断d
是否小于等于0,如果是,则直接返回;否则,根据递归调用的规则,将当前节点的高度s
乘以0.8,递归调用tree(d-1, s*.8)
来构建左子树,然后将海龟向右旋转120度,递归调用tree(d-3, s*.5)
来构建右子树,最后调用drawlight()
函数来绘制灯光。
def drawsnow():
t.ht()
t.pensize(3)
for i in range(200):
t.pencolor("white")
t.pu()
t.setx(r.randint(-350,350))
t.sety(r.randint(-100,450))
t.pd()
dens = 6
snowsize = r.randint(1,10)
for j in range(dens):
t.fd(int(snowsize))
t.backward(int(snowsize))
t.right(int(360/dens))
drawsnow()
t.done()
我们还可以实现雪花的绘制。让我们的圣诞树更加的美观。每个雪花由6个随机的等距圆组成,圆的半径从1到10不等。程序使用递归的方式来绘制每个雪花,并使用随机数来控制雪花的大小和位置。
来源:https://juejin.cn/post/7227840647489765413
猜你喜欢
- 使用celery在django项目中实现异步发送短信在项目的目录下创建celery_tasks用于保存celery异步任务。在celery_
- 在我们使用一些数据的过程中,我们想要打乱数组内数据的顺序但不改变数据本身,可以通过改变索引值来实现,也就是将索引值重新随机排列,然后生成新的
- 一、merge函数用途pandas中的merge()函数类似于SQL中join的用法,可以将不同数据集依照某些字段(属性)进行合并操作,得到
- 1、说明(1)写函数时,可以为每个参数指定默认值。当调用函数为参数提供实际参数时,Python将使用指定的实际参数;否则,将使用参数的默认值
- lxmllxml 是 Python 的一个库,用于解析和呈现 XML 和 HTML。它支持多种内置和第三方 XML 和 HTML 标记,例如
- 一般一个网站的首页访问量是最大的,如果您的网站的首页打开的非常缓慢,您的客户将会陆续离开你的网站.通常我们把需要经过复杂运算或者查询数据库得
- 为了安全我们经常给access数据库加上密码,这样就算让本人下载了数据库,那么想看到数据库中的数据也不是那么简单的,起码多了一层障碍!我们平
- 本文实例讲述了PHP实现的微信公众号扫码模拟登录功能。分享给大家供大家参考,具体如下:PHP微信公众号扫码模拟登录功能功能只是将:https
- 下面这段代码是兼容IE的图片切换代码,请问各位老鸟如何兼容FF,或者有相类似无按钮无数字兼容FF的图片切换代码?<!DOCTYPE h
- 目录Python3 面向对象一丶面向对象技术简介对象可以包含任意数量和类型的数据。2.Python面向对象的三大特性一、继承 二、
- Django将秒转换为xx天xx时xx分,具体代码如下所示:from django.utils.translation import nge
- 这是一个绘制矩阵的函数。用matshow绘制矩阵的例子:import matplotlib.pyplot as pltimport nump
- 权限级别划分如下:①、院长和财务科长:不能输入,可以无限制查询、统计;②、副院长:不能输入,可以查询、统计其分管部门的帐务;③、部门领导:不
- 本文实例讲述了python实现合并两个数组的方法。分享给大家供大家参考。具体如下:python合并两个数组,将两个数组连接成一个数组,例如,
- 实现效果:实现代码import numpy as npfrom skimage import img_as_floatimport matp
- 在Asp中如何得到所有表单的名称跟对应的值。其实,这个问题很简单,但是可能还是有很多人不知道该怎么做,所以特地写下来,仅供参考。在Asp程序
- 本文实例讲述了Python将xml和xsl转换为html的方法。分享给大家供大家参考。具体分析如下:这里需要用libxml2,所以还要先安装
- 在网站建设中,分类算法的应用非常的普遍。在设计一个电子商店时,要涉及到商品分类;在设计发布系统时,要涉及到栏目或者频道分类;在设计软件下载这
- 1、场景1)用户输入完网址后,浏览器直接弹出需要输入用户名/密码PS:此时输入用户名密码即可登录,或者直接带着用户名密码访问网站。假设url
- 1,查看py文件内的所有成员及快速定位到代码块如果你的py文件代码超过200行,一定要采用这个方法,能大大提高你的代码查找效率。方法1:(1