Python 从入门到实战34(实例2:绘制蟒蛇)

我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。

上篇文章我们讨论了数据库MySQL操作的相关知识。今天学习一个使用标准库turtle实例,绘制蛇形图。

1、绘制蟒蛇图

我们这里通过画出蟒蛇的例子来学习绘制图形的基本方法。这里需要使用turtle库中间的模块实现。是标准库,不需要再安装。

Python的turtle(海龟)库是一种简单的图形绘制的函数库,turtle库为使用者提供一个或多个小乌龟作为画笔,使用者可通过turtle库提供的各种方法去控制小乌龟在一个平面直角坐标系中移动并绘制移动轨迹以画出想要的图案。

我们先给出绘制蟒蛇图形的代码,后面按照知识点进行学习:

参考代码如下:

import turtle

turtle.setup(700,450,200,200)

turtle.penup()

turtle.fd(-300)

turtle.pendown()

turtle.pensize(30)

turtle.pencolor("red")

turtle.seth(-45)

for i in range(5):

turtle.circle(40,80)

turtle.circle(-40, 80)

turtle.circle(40,80/2)

turtle.fd(40)

turtle.circle(16,180)

turtle.fd(40* 2/3)

turtle.done()

输出的图形:

2、turtle 库使用说明

1)绘图窗体布局

绘制窗体也可以称作是画布,就是展开用于绘图的区域,可以设置它的大小和初始位置。

可以通过turtle.setup()函数来设定

语法格式:turtle.setup(width=_CFG['width'], height=_CFG['height'], startx=_CFG['leftright'], starty=_CFG['topbottom'])

设置主窗口的大小和位置。默认参数值保存在配置字典中,可通过 turtle.cfg 文件进行修改。

参数

width --- 如为一个整型数值,表示大小为多少像素,如为一个浮点数值,则表示屏幕的占比;默认为屏幕的 50%

height --- 如为一个整型数值,表示高度为多少像素,如为一个浮点数值,则表示屏幕的占比;默认为屏幕的 75%

startx --- 如为正值,表示初始位置距离屏幕左边缘多少像素,负值表示距离右边缘,None 表示窗口水平居中

starty --- 如为正值,表示初始位置距离屏幕上边缘多少像素,负值表示距离下边缘,None 表示窗口垂直居中

#setup()函数使用例子

turtle.setup(900,500,100,200)#900为画布窗口宽度,500为画布窗口高度,100、200如图所示,分别是窗口的左上角的点离屏幕左边距离、离屏幕上边缘距离。单位都是像素

turtle.done()

输出参考:

若是不设置位置参数,就是默认画布铺在屏幕的正中心,如下参考:

#setup()函数使用

turtle.setup(900,500)

turtle.done()

输出的画布:

2)turtle 空间坐标体系

先了解绝对坐标体系。如下图所示参考,海龟的位置在(0,0)

可以使用goto()函数来让海龟去到对应坐标位置,举例说明:

#setup()函数使用

turtle.setup(900,500) #设置画布大小,位置在屏幕正中心

turtle.goto(100,100) #去绝对坐标100,100

turtle.goto(-100,100)

turtle.goto(-100,-100)

turtle.goto(100,-100)

turtle.goto(0,0) #回到原点位置

turtle.done()

参考输出如下,取遍4个点以后回到原点。

除了绝对坐标,还有海龟坐标,这个是以海龟的视角来辨别方向:

海龟所处的头的前方为前进方向,后面为后退方向,还有左侧、右侧方向

对应函数:turtle.fd(d) 为向前行进d的距离,d也可以是负值

turtle.bk(d) 为向后倒退d的距离

turtle.circle(r,angle) :以海龟所处的当前位置,左侧的某一个点为圆心(海龟到这个点的距离r),进行曲线运行(运行的角度度数)

举例说明:

#海龟坐标体系操作

turtle.setup(800,500)

turtle.fd(-200)#海龟后退200像素距离

turtle.done()

输出参考:可以看到海龟从中心位置后退200像素

3)turtle 角度坐标体系

绝对角度坐标体系,参考下图所示:

可以使用函数设置海龟的朝向角度:turtle.seth(angle)

举例说明:

#海龟坐标体系操作

turtle.setup(800,500)

turtle.fd(-200)#海龟后退200像素距离

turtle.seth(45)#海龟朝向设置为45°

turtle.fd(200)

turtle.done()

另外,除了上面所说的角度绝对坐标体系,也可以以海龟角度来设置朝向。

即海龟角度体系:

对应函数:turtle.left(angle) #海龟向左改变angle的行进方向

turtle.right(angle) #海龟向右改变angle的行进方向

举例说明:

#海龟坐标体系操作,绘制Z字形

turtle.setup(800,500)

turtle.left(45) #海龟朝向设置为45°

turtle.fd(200) #向前行进200

turtle.right(135) #海龟朝向右侧135°

turtle.fd(300)

turtle.left(135) #海龟朝向左侧135°

turtle.fd(200) #向前行进200

输出参考:

4)画笔控制函数

a) turtle.pendown()

​别名: turtle.pd()、​ turtle.down()

画笔落下 --- 此时移动时将画线。

b) turtle.penup()

​别名: turtle.pu()、​ turtle.up()

画笔抬起 --- 移动时不画线。海龟抬头像飞起的状态

c) turtle.pensize(width=None)

​ 别名:turtle.width(width=None)

参数width --- 一个正数值

设置线条的粗细为 width 或返回该值。如果resizemode 设为 "auto" 并且 turtleshape 为多边形,该多边形也以同样组细的线条绘制。如未指定参数,则返回当前的 pensize。

d)turtle.pencolor(*args)

返回或设置画笔颜色。

允许以下四种输入格式:

pencolor()

返回以颜色描述字符串或元组 (见示例) 表示的当前画笔颜色。可用作其他 color/pencolor/fillcolor 调用的输入。

pencolor(colorstring)

设置画笔颜色为 colorstring 指定的 Tk 颜色描述字符串,例如 "red"、"yellow" 或 "#33cc8c"。

pencolor((r, g, b))

设置画笔颜色为以 r, g, b 元组表示的 RGB 颜色。r, g, b 的取值范围应为 0...colormode,colormode 的值为 1.0 或 255 (参见 colormode())。

pencolor(r, g, b)

设置画笔颜色为以 r, g, b 表示的 RGB 颜色。r, g, b 的取值范围应为 0...colormode。

5)运动控制函数

a) turtle.forward(distance)

turtle.fd(distance)

参数distance --- 一个数值 (整型或浮点型)

海龟前进 distance 指定的距离,方向为海龟的朝向。

b) turtle.back(distance)

turtle.bk(distance)

turtle.backward(distance)

参数distance --- 一个数值

海龟后退 distance 指定的距离,方向与海龟的朝向相反。不改变海龟的朝向。

c) turtle.right(angle)

​ turtle.rt(angle)

参数angle --- 一个数值 (整型或浮点型)

海龟右转 angle 个单位。(单位默认为角度,但可通过 degrees() 和 radians() 函数改变设置。) 角度的正负由海龟模式确定。

d) turtle.left(angle)

turtle.lt(angle)

参数angle --- 一个数值 (整型或浮点型)

​ 海龟左转 angle 个单位。(单位默认为角度,但可通过 degrees() 和 radians() 函数改变。) 角度的正负由海龟模式确定。

e) turtle.circle(radius, extent=None, steps=None)

参数

radius --- 一个数值

extent --- 一个角度数值 (或 None)

steps --- 一个整型数 (或 None)

​ 绘制一个 radius 指定半径的圆。圆心在海龟左边 radius 个单位;extent 为一个夹角,用来决定绘制圆的一部分。如未指定 extent则绘制整个圆。如果 extent 不是完整圆周,则以当前画笔位置为一个端点绘制圆弧。如果 radius 为正值则朝逆时针方向绘制圆弧,否则朝顺时针方向。最终海龟的朝向会依据 extent 的值而改变。

圆实际是以其内切正多边形来近似表示的,边的数量由 steps 指定。如果未指定边数则会自动确定。此方法也可用来绘制正多边形。

举例说明:

import turtle

turtle.setup(800,500)

turtle.circle(100)#默认绘制整个圆形

turtle.done()

绘制一个圆,半径是100:

import turtle

turtle.setup(800,500)

turtle.circle(-100,90)

turtle.done()

输出图形:

3、总体分析蟒蛇绘制的代码

import turtle #使用turtle模块前导入

turtle.setup(700,450,200,200) #设置画布大小和位置

turtle.penup() #海龟抬头,行进时不画线

turtle.fd(-300) #海龟后退200个像素

turtle.pendown() #海龟低头,行进时画线

turtle.pensize(30) #设置画笔的宽度30个像素

turtle.pencolor("red") #设置画笔红色

turtle.seth(-45) #设置海龟角度-45°

for i in range(5): #重复绘制4次

turtle.circle(40,80) #绘制圆弧,左侧半径是40,行进角度80°

turtle.circle(-40, 80) #绘制圆弧,右侧半径是40,行进角度80°

turtle.circle(40,80/2)

turtle.fd(40)

turtle.circle(16,180)

turtle.fd(40* 2/3)

turtle.done()

今天先写学习到这里了,每天进步一点点。明天也要加油啊!

相关推荐
Chef_Chen5 分钟前
从0开始机器学习--Day17--神经网络反向传播作业
python·神经网络·机器学习
百事老饼干9 分钟前
Java[面试题]-真实面试
java·开发语言·面试
千澜空25 分钟前
celery在django项目中实现并发任务和定时任务
python·django·celery·定时任务·异步任务
斯凯利.瑞恩32 分钟前
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户附数据代码
python·决策树·随机森林
杨荧1 小时前
【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统学科竞赛管理系统
java·开发语言·vue.js·spring boot·spring cloud·java-ee·kafka
白子寰1 小时前
【C++打怪之路Lv14】- “多态“篇
开发语言·c++
yannan201903131 小时前
【算法】(Python)动态规划
python·算法·动态规划
蒙娜丽宁1 小时前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
光芒再现dev1 小时前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
王俊山IT1 小时前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习