Python学习(一)——海龟绘图
最近打算开两个新专题,Python学习和C++学习,由于科研有较高的编程需求,自己的编码能力有待提高,希望将学习的过程记录下来。
今天来玩一个好玩的游戏,借助Python海龟绘图进行绘画,并学会其中的编程原理。
参考:(1)https://blog.csdn.net/suoyue_py/article/details/102458661
(2)https://docs.python.org/zh-cn/3/library/turtle.html#turtle.setheading
1 基础介绍
1.1 海龟绘图
“小海龟”turtle是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。
海龟绘图(Turtle Graphics)是python2.6版本中后引入的一个简单的绘图工具,出现在1966年的Logo计算机语言。
海龟绘图(turtle库)是python的内部模块,使用前导入即可 import turtle
海龟有3个关键属性:方向、位置和画笔(笔的属性有色彩、宽度和开/关状态)
1.2 Pycharm 安装和配置
本系统是Ubuntu 18.04,建议大家安装社区版,完全免费。
教程太多了,我就不写了,这里附上一篇,亲测有效。
https://blog.51cto.com/u_15088375/3247761
还需要安装 Anaconda3
1.3 基本元素介绍
1.3.1 画布(canvas)
画布就是turtle为我们展开用于绘图区域, 我们可以设置它的大小和初始位置
- 设置画布的大小:
turtle.screensize(canvwidth=None,canvheight=None,bg=None)
参数分别代表画布的宽、高(单位像素)和背景颜色:
turtle.screensize(800,600,"green")
turtle.screensize() #默认返回(400,300,"white")
另一种设置画布大小的方式:
turtle.setup(width=0.5,height=0.75,startx=None,starty=None)
当长和宽是小数时,代表占据整个屏幕的比例;为整数时,代表像素大小。
(startx,starty)代表窗口左上角的位置,如果为空,整个窗口位于屏幕中心。
example:
turtle.setup(width=800,height=0.8)
turtle.setup(width=800,height=600,startx=100,starty=200)
1.3.2 画笔(Pen)
使用 turtle.Pen() 来创建画笔对象
import turtle
turtle.Pen()
turtle.mainloop()#画面保持
代码执行后就建立了画布,同时屏幕中间可以看见箭头(arrow),即所谓的海龟
在海龟绘图中,海龟的起点即画布中央为 (0,0),移动单位是像素 (pixel)
描述海龟时使用了两个词语:坐标原点(位置),面朝x轴正方向(方向), turtle绘图中, 就是使用位置方向描述海龟(画笔)的状态
1.3.3 绘图命令
绘图命令主要分为三种:
- 画笔运动命令
- 画笔控制命令
- 全局控制命令
部分命令解释和补充:
turtle.circle(radius,extent=None,steps=None)#radius=半径,正负有别,extent代表弧度,steps内切正多边形的边数
turtle.setheading(angle)#转变方向,angle指绝对角度,只改变方向不行进
turtle.done() #停止画笔绘制,但是不关闭窗口
2 绘图举例
在实践中学习!
2.1 绘制正方形
import turtleturtle.setup(800, 400) #调整画板大小
turtle.up() #提起笔
turtle.goto(-50, 50) #调整画板起始点
turtle.down() #放下笔
turtle.color("red") #画笔颜色
turtle.speed(1) #控制绘画速度# 画图过程
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
# 保持画面
turtle.mainloop()
2.2 绘制太阳花
import turtle as t
import timet.color("red", "yellow")
t.speed(10)
t.begin_fill()
for _ in range(25):t.forward(200)t.left(165)t.end_fill()
time.sleep(5)
2.3 递归绘制树
from turtle import *
# 相比于 import turtle as * 这样的区别# 绘制过程使用递归算法,后续解释
def tree(branchLen, t):if branchLen > 5:t.forward(branchLen)t.right(20)tree(branchLen - 15, t)t.left(40)tree(branchLen - 10, t)t.right(20)t.backward(branchLen)t = Turtle()
myWin = t.getscreen() # 获取屏幕
t.speed(0)
t.hideturtle() # 隐藏箭头
t.left(90) # 掉转绘制方向朝上
t.up() # 画笔离开
t.backward(300) # 将画笔移动到屏幕下方
t.down() # 画笔落下
t.color("green") #调整画笔颜色
tree(110, t) #调用绘制函数
myWin.exitonclick() # 点击关闭屏幕
这种递归方法总体难度还是比较大,大家可以通过Debug的方法来初步进行,了解递归的运行方式。
2.4 绘制旋转多边形
import turtle as ta = 200
t.speed(0)
t.color("green")
for x in range(1, 37):t.forward(a)t.left(90)t.forward(a)t.left(90)t.forward(a)t.left(90)t.forward(a)t.left(100)
t.mainloop()
2.5 绘制彩色多边形
import turtlet = turtle.Pen()
t.pensize(5)
colorValue = 1
colorStep = colorValue / 36
t.speed(0)
for x in range(1, 37):colorValue -= colorStept.color(0.5, 1, colorValue)t.forward(200)t.left(90)t.forward(200)t.left(90)t.forward(200)t.left(90)t.forward(200)t.left(100)
turtle.mainloop()
2.6 绘制一个五角星
import turtlet=turtle.Pen()
t.hideturtle()
t.pensize(5) #画笔粗细
t.up()
t.goto(-100,50)#画笔移动到画布较为中心的位置
t.down()
for i in range(1,6):t.forward(200)t.right(144)turtle.done() #类似Mainloop,一个循环函数,保证画布持续存在
2.7 迭代绘制五角星
from turtle import *pen()
pencolor("red")
speed(0)for i in range(20):forward(i*20)right(144)done()
2.8 绘制彩色五角星+说明字符
from turtle import *pensize(5)
color("yellow", "red")
begin_fill() # 准备填充
for i in range(5):forward(200)right(144)end_fill() # 填充完毕up()
goto(-200, -100) # 将海龟移动到此位置
pencolor("violet") # 颜色选用紫罗兰
write("WQ", False, "left", font=('Arial', 40, 'normal')) # 在当前位置输入字符“WQ”,光标回到左下角,font中三项分别指定字型、字号和形式
done()
2.9 绘制小蛇
from turtle import *setup(900, 350, 200, 200)
up()
fd(-350)
down()
pensize(25)
color("purple")# 控制画笔起始方向
seth(-40)
# 绘制蛇身
for i in range(4):circle(60, 80)circle(-60, 80)
circle(60, 80 / 2)
# 绘制蛇头
fd(60)
circle(32, 180)
fd(60 * 2 / 3)done()
2.10 绘制科赫曲线和科赫雪花
- 科赫曲线
import turtledef koch(size, n):if n == 0:turtle.fd(size)else:for angle in [0, 60, -120, 60]:turtle.left(angle)koch(size / 3, n - 1)def main():turtle.setup(800, 400)turtle.up()turtle.goto(-300, -50)turtle.down()turtle.pensize(2)koch(600, 3)turtle.hideturtle()turtle.done()main()
- 科赫雪花
科赫雪花相当于画了三次科赫曲线
#绘制科赫雪花
import turtle
def koch(size,n):if n == 0:turtle.fd(size)else:for angle in [0,60,-120,60]:turtle.left(angle)koch(size/3,n-1)
def main():turtle.setup(600,600)turtle.penup()turtle.goto(-200,100)turtle.pendown()turtle.pensize(2)level = 3 #3阶科赫雪花,阶数koch(400,level)turtle.right(120)koch(400,level)turtle.right(120)koch(400,level)turtle.hideturtle()turtle.done()
main()
在本讲中,尝试使用海龟绘图模块(类)绘制一些基础图形,学习了一些Python编程的基础知识,当然还有很多都没涉及到,大家可以自行学习!
Python学习(一)——海龟绘图相关推荐
- Python——turtle(海龟绘图)
基本功能介绍 在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动.这个海龟带着一只钢笔,我们可以让海龟无论移动到哪都使用这只钢笔来绘制线条.通过编写代码,以各种很酷的模式移动海 ...
- Python中利用海龟绘图(Turtle方法)画个钟表盘
目录 前言 一.海龟绘图(Turtle)是什么? 二.Turtle 方法 三.主要代码和效果图 1.引入库 2.主要代码 3.全部代码 效果图 总结 前言 朋友发来个习题,挺有趣的,就简单的py ...
- python Turtle Graphics海龟绘图工具
python 2.6中引入了一个简单的绘图工具,叫做海龟绘图 Turtle Graphics 首先我们需要添加头文件 turtle import 下面引入一个代码段,是通过海龟绘图制作的五角星 imp ...
- python之turtle海龟绘图篇
海龟绘图 python2.6版本中后引入的一个简单的绘图工具,叫做海龟绘图(Turtle Graphics),出现在1966年的Logo计算机语言. 海龟绘图(turtle库)是python的内部模块 ...
- 【python学习】-matplotlib绘图如何将坐标轴刻度值设置为科学计数法形式
如何将坐标轴刻度值设置为科学计数法形式 程序默认形式 对默认形式进行修改的形式一 形式二 程序默认形式 import numpy as np import matplotlib.pyplot as p ...
- 如何给青少年讲海龟绘图的内容:第一节课
课程教案: 一:教学目标: 1:掌握turtle中的基本命令 2:知道turtle中速度最快的是0,指定turtle前进默认方向是向右 3:理解转向角度 4:培养学生学习电脑的兴趣,实际动手操作动手能 ...
- python用户界面画图_通过海龟绘图学习Python-01
作为一名Python初学者,看教程死记硬背理论知识固然是必要的,也可以通过海龟绘图的方式进行实践操作.在实践的过程中加深对理论知识的理解. 接下来,本人将通过海龟绘图的方式开启Python的学习之路. ...
- 【Python2】使用python中的turtle模块学习海龟绘图(有趣的python初体验)(最全最详细的turtle介绍使用)
目录 海龟绘图 Python中tkinter的mainloop函数实质 turtle模块里的方法 Python绘图Turtle库详解 turtle绘图的基础知识: 海龟绘图 海龟绘图是Python中非 ...
- python海龟绘图教程自学网_通过海龟绘图学习Python-01
作为一名Python初学者,看教程死记硬背理论知识固然是必要的,也可以通过海龟绘图的方式进行实践操作.在实践的过程中加深对理论知识的理解. 接下来,本人将通过海龟绘图的方式开启Python的学习之路. ...
- 拜师————python基础入门——守破离学习法,海龟绘图,画出奥运五环图,day3
第六节课:任务6:006.简单错误如何处理_守破离学习法_程序员修炼手册 刚刚开始学习python,编程常常会出现一系列错误,建议采用一种学习方法来学习: 守 破 离 (这个是学习常识) 老师出的书: ...
最新文章
- Facebook发布AR眼镜研究项目Project Aria
- Jmeter BeanShell采样器提取接口响应并传递(三)
- C++11中using 的使用
- plsqldev显示语言有问题
- 华为ensp模拟校园网/企业网实例--中型企业无线网络的设计
- Implementing Infinite Scroll Into a React Component
- PCB安规设计是怎样的?怎样设计高压电源的安规?ECM设计间距是怎样的,CAF设计间距要求是怎样的?电源的PCB间距设计指南,安规标准有哪些?380V电源安规设计
- VSCode中设置ArcGIS python工具箱.pyt文件代码高亮
- 《深度学习:走向核心素养》学习体会
- IDA 逆向代码 --- _stack_chk_guard变量 之后的局部 怎么处理
- 优秀的免费高清图片素材网站推荐
- 出现ConnectionError: Error 10061 connecting to 127.0.0.1:6379. 由于目标计算机积极拒绝,无法连接的解决方法
- 教育技术(Educational technology)学习分析和教育数据挖掘领域的SCI、SSCI、CSSCI期刊与会议
- 【机器学习】舍友居然偷偷在看这篇文章·入门机器学习
- 11-赵志勇机器学习-DBSCAN聚类
- 红米路由器ac2100怎样设置ipv6_【路由刷机】红米小米 AC2100 Windows下刷Padavan固件小小白教程、升级固件...
- 磁共振线圈分类_磁共振检查线圈如何选?没有专用线圈该怎么办?
- Dependency annotations:
- Tcp三次握手、四次分手,Socket再看不懂,你砍我
- 搭建大型网站使用的技术架构
热门文章
- windows的图片浏览器
- 帝国cmssitemap.php,帝国CMS网站地图sitemap的制作
- after伪元素实现空心三角箭头和X图标
- Android位置权限拒绝多次后,Android M中权限被拒绝时该如何处理
- 详解内存池设计与实现
- mate10无法升级鸿蒙,华为高管辟谣,Mate40下月无法升级鸿蒙,一般用户无法体验...
- EasyTouch学习之QuickBase
- 在 Cent OS 6.5 中firefox 安装 flash 插件
- parsefloat(). Php,JavaScript ParseFloat()方法
- JD带你一文搞定HTML!(有图有代码)