基于Python中的turtle绘画星星和星空
作者:迪迦瓦特曼 发布时间:2022-10-31 08:57:41
前言:
Python 中的画图工具——turtle(海龟绘图),turtle 是 Python 中自带的绘图模块,最初来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所创造的 Logo 编程语言。
使用 turtle 控制画笔在画板上画画。而这个画笔是有形状的,默认是一个小箭头,我们可以使用 turtle.shape('turtle') 将其设成一个小海龟。除了变成小海龟外,还支持传入 'arrow'(箭头),'circle'(圆),'square'(正方形),'triangle'(三角形)和 'classic'(经典).
画笔的颜色默认是黑色的,我们可以使用turtle.color('red')
改成红色的。当然,你也可以使用 turtle.color('yellow') 改成黄色,使用turtle.color('pink')
改成粉色等等。
一、画一个N边形
import turtle
turtle.color('red') #将画笔颜色设置成红色
turtle.hideturtle() #隐藏小海龟
#画一个n边形
def draw_polygon(n):
for i in range(n):
turtle.forward(100)
turtle.right(360/n)
draw_polygon(5) #画一个五边形
turtle.done()
二、画五角星
五角星每个角的度数都是 36 度,用 180 - 36 得到对应的补角为 144 度。
如下图所示:
五角星的五条线的长度是一样的,并且角度也一样。那么,我们就可以用循环来画五角星。五角星要画 5 条线,因此要循环 5 次。每次循环都除了画一条线,还要旋转特定的角度。从上图可知,每次向右旋转 144 度即可。
所以画五角星的代码如下:
import turtle
turtle.color('red') # 画笔颜色和填充颜色都设为红色
turtle.hideturtle() #隐藏小海龟
turtle.begin_fill() #开始填充
for i in range(5):
turtle.forward(100)#向前走100像素
turtle.right(144) #右转144度
turtle.end_fill() #结束填充
打印出结果其实上图五角星不在画板中央,我们将它移动到画板中央
注意:(-50, 20) 只是针对边长 100 像素的五角星,不要随意修改边长。
import turtle
turtle.color('red')
turtle.hideturtle()
turtle.penup()
turtle.goto(-50,20)
turtle.pendown()
turtle.begin_fill()
for i in range(5):
turtle.forward(100)
turtle.right(144)
turtle.end_fill()
turtle.done()
三、一闪一闪亮晶晶
我们来画一堆星星,实现“一闪一闪亮晶晶,满天都是小星星”的效果~✨
因为画的星星比较多,我们先把之前画五角星的代码封装成一个函数:
import turtle
def draw_star():
turtle.color('white')
turtle.hideturtle()
turtle.begin_fill()
for i in range(5):
turtle.forward(10)
turtle.right(144)
turtle.end_fill()
星星的光是白色的,因此我将颜色设置成了白色(white
)。并且,因为是小星星,我将边长设成了 10 像素。画一个小星星的方法搞定了,接下来是画满天星,就画 50 个吧!
满天星的位置都是随机的,我们需要用到 random 模块生成随机位置。因为教学环境中显示区域有限,随机位置在 x 轴上的范围是 -150 到 150,在 y 轴上的范围是 -100 到 100。
随机画 50 颗小星星的代码如下:
import turtle
from random import randint
def draw_star():
turtle.color('white')
turtle.hideturtle()
turtle.begin_fill()
for i in range(5):
turtle.forward(10)
turtle.right(144)
turtle.end_fill()
for i in range(50):
turtle.speed(0) # 最快速
turtle.penup()
x = randint(-150, 150) # x 轴
y = randint(-100, 100) # y 轴
turtle.goto(x, y)
turtle.pendown()
draw_star()
应该注意到了 turtle.speed(0)
这行代码,这是控制绘图速度的。因为画 50 颗小星星耗时较久,所以要加快绘图速度。 turtle.speed(0) 的参数是 0-10 的整数,其中 1-10 数字越大,绘图速度越快。1 最慢,10 最快,默认是 6。而 0 表示没有动画效果,因此 0 比 10 的速度还要快。
满天星画完了,我们最后再署个名。调用turtle.write()
可以在画板上写字,参数为要写的内容。我们还能设置字的字体、大小等,比如 turtle.write('By 黄帮主', font = ('SimHei', 12, 'bold'))。font 参数是个元组,其中第一个是字体,第二个是字体大小,最后一个是字重。
为了让文字更清晰可见,我将字体设置成了黑体!12 像素!加粗!完整的代码如下:
import turtle
from random import randint
def draw_star():
# 补全画一颗星星的代码
turtle.color('red')
turtle.hideturtle()
turtle.begin_fill()
for i in range(5):
turtle.forward(10)
turtle.right(144)
turtle.end_fill()
# 将 ??? 改成你想画的星星个数
for i in range(50):
turtle.speed(0)
turtle.penup()
x = randint(-150, 150)
y = randint(-100, 100)
turtle.goto(x, y)
turtle.pendown()
draw_star()
turtle.penup()
turtle.goto(0, -130)
turtle.pendown()
turtle.write('一闪一闪亮晶晶', font = ('SimHei', 12, 'bold'))
turtle.done()
最终结果:
来源:https://blog.csdn.net/weixin_43734080/article/details/123243039
猜你喜欢
- 下面通过实例代码给大家介绍python 中pyqt5 树节点点击实现多窗口切换问题,具体代码如下所示:# coding=utf-8impor
- 对于非连续数据集,数据可视化时候需要每七天一个采样点。要求是选择此前最新的数据作为当日的数据展示,譬如今天是2019-06-18,而数据集里
- 前言:perl是什么,干什么用的?perl原来设计者的意图是用来处理 字符的,80%的强项是处理字符,当然其它的很多都可以。现在很多网页也是
- Python传入参数的方法有:位置参数、默认参数、可变参数、关键字参数、和命名关键字参数、以及各种参数调用的组合写在前面Python唯一支持
- 熟悉web开发的同学对hook钩子肯定不陌生,通过钩子可以方便的实现一些触发和回调,并且做一些过滤和拦截。django中的中间件(middl
- 一、个人安装环境1.Windows10x64_pro2.anaconda4.6.9 +python3.7.1(anaconda集成,不需单独
- 目录1. 加载保存好的模型2. 使用flask起服务3. 发送请求并得到结果4. 效果呈现1. 加载保存好的模型为了方便起见,这里我们就使用
- 利用python 写一些网络服务的时候,当网络状况不好,或者资源占用过多,任务拥塞的情况下,总会抛出一些异常,当前任务就被终止了,可以很好的
- Notepad++ 是一款非常有特色的编辑器,软件小巧高效,支持27种编程语言,通吃C,C++ ,Java ,C#, XML, HTML,
- 一、JSON数据格式介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON建
- 如下所示:# #### dict中将key相同的字典合并在一个对象里"""a = {"a"
- 代码如下: <% '屏蔽主流的下载工具 Dimxurl,xtool '获取浏览器AGENT xurl=lcase(Re
- @StartIndex为当前页起始序号,@EndIndex为当前页结束记录序号,可以直接作为参数输入,也可以通过输入PageSize和Pag
- 数在 Python 中,对数的规定比较简单,基本在小学数学水平即可理解。那么,做为零基础学习这,也就从计算小学数学题目开始吧。因为从这里开始
- 本文实例讲述了Python读取properties配置文件操作。分享给大家供大家参考,具体如下:工作需要将Java项目的逻辑改为python
- 1、数据驱动介绍:@ddt.ddt(类装饰器,申明当前类使用ddt框架)@ddt.data(函数装饰器,用于给测试用例传递数据),支持传py
- 如下所示:import numpynew_list = [i for i in range(9)]numpy.array(new_list)
- 在使用 peewee 框架时,默认是不会出现日志消息的。from peewee import Model, CharField, DateT
- 在我的职业生涯中,我写过、用过和看到过很多随意的脚本。一些人需要半自动化完成任务,于是它们诞生了。一段时间后,它们变得越来越大。它们在一生中
- 引言随着我被拉入一个新的群聊“生产环境死锁问题排查解决”,打破了午后的悠然惬意,点开群聊秒送了一个6