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

news2024/10/5 17:38:28

        我们的目标是:通过这一套资料学习下来,通过熟练掌握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() 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2190254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言指针plus版练习

上期我们讲了进阶的指针,本期内容我们来强化一下上期学的内容 一、字符串左旋 实现一个函数,可以左旋字符串中的k个字符。 1.1 分析题目 假设字符串为abcde,左旋一个以后就变成bcdea,就是把第一个字符移到一个新的变量里面&#…

5G NR BWP 简介

文章目录 BWP介绍BWP 分类BWP相关总结 BWP介绍 5G NR 系统带宽比4G LTE 大了很多,4G LTE 最大支持带宽为20MHz, 而5G NR 的FR1 最大支持带宽为100MH在, FR2 最大支持带宽为 400MH在。带宽越大,意味了终端功耗越多。为了减少终端的…

哪款百元头戴式耳机性价比高?四款大火爆全网的机型盘点推荐!

在繁忙的生活节奏中,寻找一片属于自己的宁静空间,成为了许多人的内心渴望。头戴式降噪耳机,正是那把打开音乐世界的钥匙。它不仅能够隔绝外界的喧嚣,还能将您带入一个纯净无瑕的音乐世界。无论是沉浸在古典乐的悠扬旋律中&#xf…

数据服务-存储服务(NFS)

1.概述 存储: 用于存放用户上传的内容(数据),一般应用在网站集群中 如果不使用存储,用户上传的数据就直接存放在网站服务器上了,用户下次访问就可能找不到 如果使用存储,用户上传的内容存放在存储上面,用户访问就会访问存储. 位置: 网站后排. 2. 存储分类 分类说明硬件存储硬件…

【高等数学学习记录】函数的极限

一、知识点 (一)知识结构 #mermaid-svg-Dz0Ns0FflWSBWY50 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Dz0Ns0FflWSBWY50 .error-icon{fill:#552222;}#mermaid-svg-Dz0Ns0FflWSBWY50 .erro…

KiCad 综合笔记

开窗 选中顶层或者底层 Mask 层,然后进行覆铜: 四层板 KiCad Tutorial - How to make a 4 layer PCB https://bbs.elecfans.com/jishu_2365544_1_1.html 虽然在“电路板设置”中,可以选择铜层的类型,但如果选择了“电源层”,除了用于告诉“Free router”布线器在自动布…

vue3+vite@4+ts+elementplus创建项目详解

1、第一步创建项目cnpm init vite4 2、设置vue3.2局域网可访问配置: 找到项目路径下的package.json目录下找到script对象下面添加一下代码: "serve": "vite --host 0.0.0.0" 启动项目命令不在是dev而是:cnpm run serve 3…

Linux中的进程信号

目录 进程信号 kill/raise/abort 硬件异常产生信号 由软件条件产生信号 信号在内核中的表示示意图 pending: block: 信号集操作函数 sigprocmask 进程信号 信号量和信号不同 信号量的本质是计数器,计数器可以被多进程同时看到。可以对资源进行预定。 所有进…

OpenJudge | 置换选择排序

总时间限制: 1000ms 内存限制: 65536kB 描述 给定初始整数顺串,以及大小固定并且初始元素已知的二叉最小堆(为完全二叉树或类似完全二叉树,且父元素键值总小于等于任何一个子结点的键值),要求利用堆实现置换选择排序&a…

程序员如何在 AI 时代保持核心竞争力

前言 随着 AIGC 大语言模型的不断涌现,AI 辅助编程工具的普及正在深刻改变程序员的工作方式。在这一趋势下,程序员面临着新的挑战与机遇,需要思考如何应对以保持并提升自身的核心竞争力。 目录 一、AI 对编程工作的影响 (一&…

一、走进新语言

走进新语言 介绍环境配置JDK配置Kotlin配置 开发工具代码基本结构程序注释 介绍 Kotlin是一种现代但已经成熟的编程语言,旨在让开发人员更快乐。它简洁、安全、可与Java和其他语言互操作,并提供了许多在多个平台之间重用代码的方法。它由JetBrains公司于…

2.JUC

掌握 Java 并发编程,熟悉线程池、并发容器以及锁的机制,如 sychronized、ReentrantLock、AQS等。 2.0 并发基础 线程等待唤醒机制LockSupport (3种) 方式一:使用Object中的wait()方法让线程等待,使用Object中的notify()方法唤醒…

数据结构 ——— 单链表oj题:链表分割(带哨兵位单向不循环链表实现)

目录 题目要求 手搓简易单链表 代码实现 题目要求 现有一链表的头指针 ListNode* head ,给一定值 x ,编写一段代码将所有小于 x 的节点排在其余节点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头节点 举例说明&a…

【包教包会】2D图片实现3D透视效果(支持3.x、支持原生、可合批)

将去年写的SpriteFlipper从2.x升级到3.x。 如果需要2.x版本或需要了解算法思路,请移步:https://blog.csdn.net/weixin_42714632/article/details/136745051 优化功能:可同时绕X轴和Y轴旋转,两者效果会叠加。 完美适配Web、原生…

typescript使用webpack打包编译问题

解决方案:在webpack.config.js中的mdule.exports中设置mode。 再次运行npm run start即可。

Python基本库的使用--urllib

开篇 本篇文章旨在总结urlib基本库的一些常用用法。 相关方法 urlopen 用户打开和读取URL。 import urllib.requestresponse urllib.request.urlopen(https://www.python.org) print(response.read().decode(utf-8))带data参数 import urllib.parse import urllib.requestda…

【计算复杂性理论】P可归约(归约,P-reducible)与P、NP、NP-Hard、NP-Complete问题

1 问题背景 如果想要了解P问题、NP问题、NP-Hard问题、NP-Complete问题之间的关系,那就需要从了解NP-complete问题和归约概念开始。上一篇文章中,我们介绍了计算复杂性理论的奠基之作《The Complexity of Theorem-Proving Procedures》,在这篇…

初识算法 · 滑动窗口(1)

目录 前言: 长度最小的子数组 题目解析 算法原理 算法编写 无重复长度的最小字符串 题目解析 算法原理 算法编写 前言: 本文开始,介绍的是滑动窗口算法类型的题目,滑动窗口本质上其实也是双指针,但是呢&#…

初识数据结构--时间复杂度 和 空间复杂度

数据结构前言 数据结构 数据结构是计算机存储、组织数据的方式(指不仅能存储数据,还能够管理数据-->增删改)。指相互之间存在一种或多种特定关系的数据元素的集合。没有单一的数据结构对所有用途都有用,所以我们要学习各种的数据结构,比…

[Python] 编程入门:理解变量类型

文章目录 [toc] 整数常见操作 浮点数字符串字符串中混用引号问题字符串长度计算字符串拼接 布尔类型动态类型特性类型转换结语 收录专栏:[Python] 在编程中,变量是用于存储数据的容器,而不同的变量类型则用来存储不同种类的数据。Python 与 C…