基于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
猜你喜欢
- 此文译自Fred Wilson 2010年2月在迈阿密举行的Web未来应用的年会上的演讲谢谢青云推荐了这篇这么好的演说谢谢卓和百忙中抽空帮我
- 1.变量的赋值操作只是多生成了一个变量,实际上还是指向同一个对象# -*- coding: utf-8 -*-class CPU: &nbs
- ModuleNotFoundError: No module named ‘dlib'尝试命令,但没成功pip3 install d
- 这是我在做的一个游戏的半成品,整理了一下发出来.原理:通过更新变换矩阵来记录转动(函数remx()).利用矩阵计算出转动后的正方体顶点坐标,
- asp程序运行速度试验实验:1。作相同的分支条件判断:IF 比 SELECT慢。用以下程序测试:
- 今天给大家分享的主题是用百度的接口实现图片的文字识别。1.环境和配置要求整体是用Python实现,所需要使用的第三方库包括aip、PIL、k
- 背景一直对语音合成系统比较感兴趣,总想能给自己合成一点内容,比如说合成小说,把我下载的电子书播报给我听等等。语音合成系统其实就是一个基于语音
- 在XHTML标签中有一些标签的作用是相似的,当然这里的相似是指语义相似,以至于很多人都不清楚这些相似的标签如何使用,那么今天的主题就是分解相
- 10个杀手级应用的Python自动化脚本重复的任务总是耗费时间和枯燥的。想象一下,逐一裁剪100张照片,或者做诸如Fetching APIs
- 什么是生成器?生成器是一个包含了特殊关键字yield的函数。当被调用的时候,生成器函数返回一个生成器。可以使用send,throw,clos
- 本文实例讲述了python检测某个变量是否有定义的方法。分享给大家供大家参考。具体如下:第一种方法使用内置函数locals():'t
- 在ASP中利用OWC(Office Web Components)控件可轻松实现各种图表功能,如饼图,簇状柱型图,折线图
- 可输入的下拉列表框(select),这个不同于网页上常见的下拉列表框,那个是只能选择不能输入的,而这个是可以自己输入文字的。例如:我们最常见
- INSTR的第三个参数为1时,实现的是indexOf功能。 INSTR的第三个参数为-1时,实现的是lastIndexOf功能。 例如: I
- 最近给卫生局做一个表格上传/可视化系统,算是小有成果。今天把项目中的文件拖拽上传模块分离出来,做了一个独立的小demo,并把相关代码打包上传
- 简介Go的标准包Container中包含了常用的容器类型,包括conatiner/list,container/heap,container
- 删除一条留言信息会级联删除回复信息,这时我们需要用到事务,如下SQL 代码如下:ALTER PROCEDURE [dbo].[proc_tb
- 一、什么是jieba库jieba是优秀的中文分词第三方库,由于中文文本之间每个汉字都是连续书写的,我们需要通过特定的手段来获得其中的每个词组
- 使用python写爬虫时,优选selenium,由于PhantomJS因内部原因已经停止更新,最新版的selenium已经使用headles
- 方法一:利用Cookies对象 因为Cookies对象把变量的值保存在浏览器客户端,所以可以根据Cookies保存的IsVoted的值来判断