当前位置: 首页 > news >正文

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() 

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

相关文章:

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

我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们讨论了数据库MySQL操作的相关知识。今天学习一个使用…...

Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误

Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误 前言一、WinRiver II 测量项目 MMT 文件的结构二、WinRiver II 无法打开或操作测量项目 MMT 文件2.1 无法载入船测多线法测量文件2.2 可以载入测验项目 MMT 文件,但 ADCP 后处理软件无法写入信息2.3…...

JAVA实现大写金额转小写金额

在金融行业中经常需要把大写金额转成小写金额,之前在一次开发中有个类似的需求,翻阅了好多博文,都没找到合适的,故没办法,就花了点时间研究并实现! 实现代码如下: private static final Character ZERO 零;private s…...

如何使用ssm实现基于SSM的宠物服务平台的设计与实现+vue

TOC ssm779基于SSM的宠物服务平台的设计与实现vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化&#x…...

【C++学习笔记 21】C++中的动态数组 vertor

静态数组 首先来创建一个静态数组 #include <iostream> #include <string>struct Vertex {float x, y, z; };std::ostream& operator<<(std::ostream& stream, const Vertex& vertex) {stream << vertex.x << "," <&…...

MongoDB 快速入门+单机部署(附带脚本)

目录 介绍 体系结构 数据模型 BSON BSON 数据类型 特点 高性能 高可用 高扩展 丰富的查询支持 其他特点 部署 单机部署 普通安装 脚本安装 Docker Compose 安装 卸载 停止 MongoDB 删除包 删除数据目录 参考&#xff1a; https://docs.mongoing.com/ 介绍…...

组合数求法汇总

一&#xff1a;递推求解 对于组合数&#xff0c;有此式&#xff1a; C n m C n − 1 m − 1 C n − 1 m C_{n}^{m}C_{n-1}^{m-1}C_{n-1}^{m} Cnm​Cn−1m−1​Cn−1m​。 C n m C_{n}^{m} Cnm​ 可理解为 n n n 个数中选 m m m 个&#xff0c;不同的方案。对于第 n n n 个…...

Python知识点:在Python编程中,如何使用Joblib进行并行计算

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; Joblib是一个Python库&#xff0c;它被设计用来提供轻便的并行计算解决方案&…...

matlab-对比两张图片的CIElab分量的差值并形成直方图

%对比两张图片的CIElab分量的差值并形成直方图&#xff0c;改个路径就能用&#xff0c;图片分辨率要一致 close all; clear all; clc; I1imread(E:\test\resources\image\1.jpg); I2imread(E:\test\resources\image\2.jpg); lab1 rgb2lab(I1); lab2 rgb2lab(I2); % 提取色度…...

(十七)、Mac 安装k8s

文章目录 1、Enable Kubernetes2、查看k8s运行状态3、启用 kubernetes-dashboard3.1、如果启动成功&#xff0c;可以在浏览器访问3.2、如果没有跳转&#xff0c;需要单独安装 kubernetes-dashboard3.2.1、方式一&#xff1a;一步到位3.2.2、方式二&#xff1a;逐步进行 1、Enab…...

信息学奥赛一本通 2087:【22CSPJ普及组】解密(decode) | 洛谷 P8814 [CSP-J 2022] 解密

【题目链接】 洛谷 P8814 [CSP-J 2022] 解密 ybt 2087&#xff1a;【22CSPJ普及组】解密(decode) 【题目考点】 1. 数学&#xff1a;一元二次方程求根 【解题思路】 输入n&#xff0c;d&#xff0c;e&#xff0c;满足 n p ∗ q np*q np∗q e ∗ d ( p − 1 ) ( q − 1…...

【重学 MySQL】四十八、DCL 中的 commit 和 rollback

【重学 MySQL】四十八、DCL 中的 commit 和 rollback commit的定义与作用rollback的定义与作用使用场景相关示例注意事项DDL 和 DML 的说明 在MySQL中&#xff0c;DCL&#xff08;Data Control Language&#xff0c;数据控制语言&#xff09;用于管理数据库用户和控制数据的访问…...

Java面试八股之认证授权

一、概念&#xff1a; 1、什么是认证&#xff1f;什么是授权&#xff1f; 认证 用于在系统登录时&#xff0c;验证身份的凭证&#xff0c;类似于账号、密码等。 授权 用户在访问资源时&#xff0c;根据权限的不同对资源访问程度不同。 2、什么是cookie&#xff1f;什么是…...

RCE_绕过综合

<aside> &#x1f4a1; 管道符 </aside> <aside> &#x1f4a1; 通配符绕过 </aside> **匹配任何字符串&#xff0f;文本&#xff0c;包括空字符串&#xff1b;*代表任意字符&#xff08;0个或多个&#xff09;? 匹配任何一个字符&#xff08;不…...

关于Generator,async 和 await的介绍

在本篇文章中我们主要围绕下面几个问题来介绍async 和await &#x1f370;Generator的作用&#xff0c;async 及 await 的特点&#xff0c;它们的优点和缺点分别是什么&#xff1f;await 原理是什么&#xff1f; &#x1f4c5;我的感受是我们先来了解Generator&#xff0c;在去…...

Redis数据库与GO(二):list,set

一、list&#xff08;列表&#xff09; list&#xff08;列表&#xff09;是简单的字符串列表&#xff0c;按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。List本质是个链表&#xff0c; list是一个双向链表&#xff0c;其元素是有序的&#xff0c;元…...

c++知识点总结

1.把字符串a复制到b里面 #include<iostream> #include<string.h> using namespace std; int main() {char a[110],b[110];cin>>a;int n strlen(a);for(int i 0;i<n1;i){b[i] a[i];}cout<<b;return 0; }2.比较两个字符串的大小 如果a大返回1&…...

无IDEA不Java:快速掌握Java集成开发环境

IntelliJ IDEA是一种强大的Java集成开发环境&#xff0c;是Java开发人员的首选工具之一。本文将介绍IDEA的基本使用方法和常用功能&#xff0c;以帮助初学者快速上手。 安装和配置 首先&#xff0c;需要下载并安装IntelliJ IDEA。在安装完成后&#xff0c;需要配置JDK&#xff…...

9.30学习记录(补)

手撕线程池: 1.进程:进程就是运行中的程序 2.线程的最大数量取决于CPU的核数 3.创建线程 thread t1; 在使用多线程时&#xff0c;由于线程是由上至下走的&#xff0c;所以主程序要等待线程全部执行完才能结束否则就会发生报错。通过thread.join()来实现 但是如果在一个比…...

移动应用中提升用户体验的因素

用户体验&#xff08;UX&#xff09;是任何移动应用程序成功的关键因素。随着数以百万计的应用程序争夺注意力&#xff0c;提供无缝、愉快和高效的体验可能是获得忠实用户或在一次互动后失去忠实用户之间的区别。无论是商业应用程序、游戏还是社交平台&#xff0c;增强用户体验…...

VS与VSCode的区别

文章目录 1. 什么是 Visual Studio 和 Visual Studio Code&#xff1f;Visual Studio&#xff08;VS&#xff09;Visual Studio Code&#xff08;VS Code&#xff09; 2. 主要区别详解性能和资源占用功能和复杂性扩展和自定义适用场景价格 3. 详细对比总结4. 如何选择适合自己的…...

用Python和OpenCV实现人脸识别:构建智能识别系统

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 人脸识别技术在现代社会的各个领域得到了广泛应用,从智能手机的面部解锁到公共场所的安全监控,人脸识别已经成为一项日益重要的技术。本教程将指导你使用Python中的OpenCV库来构建一个简单的人脸检测与识别系统…...

微积分-反函数6.5(指数增长和衰减)

在许多自然现象中&#xff0c;数量的增长或衰减与其大小成正比。例如&#xff0c;如果 y f ( t ) y f(t) yf(t) 表示在时间 t t t 时某种动物或细菌种群的个体数量&#xff0c;那么似乎可以合理地假设增长速率 f ’ ( t ) f’(t) f’(t) 与种群 f ( t ) f(t) f(t) 成正比…...

C初阶(十二)do - while循环 --- 致敬革命烈士

大家国庆看阅兵仪式和天安门升旗仪式了吗&#xff1f;岁月安好&#xff0c;只因有人负重前行。 ————山那边是什么 ————是烈士的英魄 ————是他们拼死保卫的新中国 ————河那边是什么 ————是绵延的战火 ————她望着远方泪一滴滴的落 ————和平来了 ——…...

从零开始:SpringBoot实现古典舞在线交流平台

第二章 相关技术介绍 2.1Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xf…...

AL生成文章标题指定路径保存:创新工具助力内容创作高效启航

在信息爆炸的时代&#xff0c;一个吸引人的标题是文章成功的第一步。它不仅要准确概括文章内容&#xff0c;还要能激发读者的好奇心&#xff0c;促使他们点击阅读。随着人工智能技术的飞速发展&#xff0c;AL生成文章标题功能正逐渐成为内容创作者的新宠&#xff0c;看看它是如…...

java基础知识汇总

以下内容是学习《java核心技术卷1》的学习笔记 一、一个简单的java应用程序 public class App { public static void main(String[] args) { System.out.println("yuanyexiaolu"); } } 代码解释&#xff1a; 关键字public称为访问修饰符&#xff0c;这些修饰…...

2.点位管理|前后端如何交互——帝可得后台管理系统

目录 前言点位管理菜单模块1.需求说明2.库表设计3.生成基础代码0 .使用若依代码生成器最终目标1.创建点位管理2.添加数据字典3.配置代码生成信息4.下载代码并导入项目 4.优化菜单——点位管理1.优化区域管理2.增加点位数3. 合作商4.区域管理中添加查看详情功能5.合作商添加点位…...

Redis基础二(spring整合redis)

Springboot整合Redis 一、Springboot整合redis ​ redis可以通过使用java代码来实现 第一部分文档中 在终端操作redis的所有命令&#xff0c;Spring已经帮我们封装了所有的操作&#xff0c;所以变得很简单了。 ​ Spring专门提供了一个模块来进行这些操作的封装&#xff0c;这…...

JAVA开源项目 教学资源库系统 计算机毕业设计

本文项目编号 T 067 &#xff0c;文末自助获取源码 \color{red}{T067&#xff0c;文末自助获取源码} T067&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计5.4.1 管…...