给普通人的Python——第四章
文章目录
- 4. 写点有趣的程序:图形编程
- 4.1 画图基础
- 4.2 深入用法
- 4.3 使用总结
- 请关注公众号:编程之路从0到1
4. 写点有趣的程序:图形编程
写这个系列的时候我就立了一个flag,要有趣!结果前面几天讲了很多基础知识,大家越看越乏味了,这也是没办法的,没有一点点基础知识,有趣的咱也玩不转不是。我知道很多人学编程都想写那种有界面可以鼠标点按的程序,但是我们离这个目标还稍微有一点点距离,今天我们学的这一篇就是打个前站,了解一点图形化程序开发的知识。
4.1 画图基础
我们先运行下面的代码看一下效果
import turtlewindow = turtle.Screen()
tt = turtle.Turtle()
tt.penup()
tt.goto(-100, 0)
tt.pendown()
tt.pencolor("red")for i in range(4):tt.forward(200)tt.right(144)
tt.forward(200)window.mainloop()
运行示意图
没错,我们用Python代码画了一个五角星,这就是我们今天要学习的内容,使用Python画图。
为了适应不同基础的朋友,在正式学习代码之前,咱们得先复习一下英语
单词 | 释义 |
---|---|
turtle | 海龟 |
screen | 屏幕 |
forward | 向前 |
backward | 向后 |
fill | 填充 |
circle | 圆圈 |
第1行代码import turtle
,说明咱们画图需要先引入一个叫做“海龟”的模块。这个名字有一点莫名其妙,那么有人肯定要问了,为什么叫海龟呢?这是因为turtle
绘图原理是这样的,假设有一只海龟,它正在窗口正中心,当它在画布上游动,所走过的轨迹就形成了绘制的图形。说白了,这就是turtle
库作者的一个比喻,什么海龟不海龟的,其实就是指的画笔。我们所谓的画画,不就是拿笔在纸上面画线条么。
到这里我们先回忆一下生活中画画的场景,首先要支起一个画板,然后在画板上面铺上画布,最后拿起画笔沾颜料画画。我们用代码画图的时候,大致也是这么个过程,只要联系一下生活中的画画场景,就很容易理解代码。
让我们来一点点学习,首先运行下面的代码,会发现有一个窗口一闪而过
import turtle# 创建一个窗口对象,并赋值给变量window
window = turtle.Screen()# 创建一个海龟对象,并赋值给变量tt
tt = turtle.Turtle()
窗口一闪而过肯定是不行的,这时候我们需要在代码文件最后加一句window.mainloop()
,实际上就是调用窗口对象的mainloop()
函数,作用就是不让窗口立刻关闭。
再次运行下面的代码
import turtle# 创建一个窗口对象,并赋值给变量window
window = turtle.Screen()# 创建一个海龟对象,并赋值给变量tt
tt = turtle.Turtle()# 不让窗口立刻退出
window.mainloop()
这里我们通过window = turtle.Screen()
创建一个窗口对象,我们既然是图形程序,那肯定是需要有一个窗口的嘛。这里唯有一点要说明,这次我们调用turtle
模块的Screen()
函数是大写开头的,以后都要注意,创建对象的时候调用的是构造函数,函数名的首字母都是大写开头的,至于什么是对象,什么又是构造函数以后都会说明的,现在无需纠结啦,记得这回事就好。
接下来我们又通过Turtle()
函数创建了一个“海龟对象”,并赋值给tt
变量,我们看到窗口中有一个黑色的小三角箭头,这个就是我们的“海龟对象”,注意了,它是有朝向的哦,它默认朝向右侧。
好了,我们创建的窗口就是绘画中的画板了,它不仅是画板,而且还自带了画布呢,因此我们还省下了创建画布的过程,接着创建的“海龟”先生也就是我们的画笔了,更形象的说应该是“笔头”。到这里,万事具备只欠东风了,我们可以开始作画了!
学美术,画画之前要先学画线条,那我们就先画一条直线
import turtle# 创建一个窗口对象,并赋值给变量window
window = turtle.Screen()# 创建一个海龟对象,并赋值给变量tt
tt = turtle.Turtle()# 调用海龟对象的forward函数,向前移动200像素
tt.forward(200)# 不让窗口立刻退出
window.mainloop()
这里简单说一下像素这个单位,我们通常说的屏幕的分辨率就是其实就是指的像素,比如我们说的屏幕的分辨率1920x1080,其实就是指该屏幕宽有1920个像素,高有1080个像素。
这次让我稍微画复杂一点的,画一个直角
import turtle# 创建一个窗口对象,并赋值给变量window
window = turtle.Screen()# 创建一个海龟对象,并赋值给变量tt
tt = turtle.Turtle()# 调用海龟的forward函数,向前移动200像素
tt.forward(200)# 抬起画笔
tt.penup()# 调用backward函数,向后退200像素
tt.backward(200)# 落下画笔
tt.pendown()# 向左转90度
tt.left(90)# 向前移动200像素
tt.forward(200)# 不让窗口立刻退出
window.mainloop()
上面代码的注释已经写得很详细了,penup
、pendown
这些函数名也都很好认,只有一点要说明,那就是只有当我们的画笔是落下状态时,向前或向后移动才能画出线条,而当我们调用penup()
函数抬起画笔后,前后移动是不会画出线条的,而画笔默认就是落下的。
理解了之后,上面的都是小儿科了,下面我们接着学习,在之前的代码后面增加几行代码,我们再画一个圆
import turtle# 创建一个窗口对象,并赋值给变量window
window = turtle.Screen()# 创建一个海龟对象,并赋值给变量tt
tt = turtle.Turtle()# 调用海龟的forward函数,向前移动200像素
tt.forward(200)# 抬起画笔
tt.penup()# 调用backward函数,向后退200像素
tt.backward(200)# 落下画笔
tt.pendown()# 向左转90度
tt.left(90)# 向前移动200像素
tt.forward(200)# 将画笔复位到初始状态,也就是窗口正中心位置
tt.home()# 设置画笔的粗细
tt.pensize(10)# 设置画笔的颜色
tt.pencolor("yellow")# 画圆弧,第一个参数为半径,第二个参数为弧度。360为整圆,180为半圆
tt.circle(100, 360)# 不让窗口立刻退出
window.mainloop()
这里就不放图了,大家运行之后看效果
最后,我们来说一下关于坐标体系的问题。我们初中数学就已经学过平面直角坐标系,这个相信大家都不陌生,在我们的turtle
中,画笔默认出现的位置就是我们的坐标原点(0,0),也就是我们窗口的正中心,我们调用tt.home()
其实就是让画笔回到坐标原点复位,且画笔的朝向也复位为朝右。这一点我们可以调用函数来验证
import turtle# 创建一个窗口对象,并赋值给变量window
window = turtle.Screen()# 创建一个海龟对象,并赋值给变量tt
tt = turtle.Turtle()# 调用pos函数,返回画笔当前的坐标点并打印输出
print(tt.pos())# 不让窗口立刻退出
window.mainloop()
输出结果:
(0.00, 0.00)
如上,我们调用画笔的pos()
函数返回当前坐标点,这里pos就是position的缩写。可以看到,默认位置坐标正是原点。既然如此,那么我们想将画笔移动到任意坐标位置怎么办呢?这个时候,我们可以通过调用画笔的goto()
函数做到,该函数可以传入两个参数,这是x、y的坐标值。这个函数在我们一开始绘制五角星的代码中使用过tt.goto(-100, 0)
,这里要记得,如果我们只是想移动到指定的坐标位置,而不想画出线条,那么我们应该先调用penup()
函数抬起画笔,当我们要画线时,则需要再调用pendown()
落下画笔。
4.2 深入用法
这次我们写一个稍微深入一点的示例,画一个圆并给圆中填充绿色,除了画图,我们还学习一下文字的写法
import turtle# 创建一个窗口对象,并赋值给变量window
window = turtle.Screen()# 创建一个海龟对象,并赋值给变量tt
tt = turtle.Turtle()# 隐藏画笔的小箭头
tt.hideturtle()# 写一行文字,并设置字体和字号
tt.write("人生苦短,我用Python", font=("华文行楷", 18))# 抬起画笔
tt.penup()# 移动画笔到(0,100)坐标处
tt.goto(0, 100)# 放下画笔
tt.pendown()# 设置填充色
tt.fillcolor("green")# 开始填充
tt.begin_fill()# 画一个圆
tt.circle(100, 360)# 完成填充
tt.end_fill()# 不让窗口立刻退出
window.mainloop()
4.3 使用总结
这里将上面代码中调用过的函数做一个总结,方便查看
函数 | 说明 |
---|---|
home() | 将画笔移动到起点(0,0),并朝向右侧 |
forward(distance) | 将画笔向前方移动distance个像素 |
backward(distance) | 将画笔向后方移动distance个像素 |
right(degree) | 将画笔向右旋转degree度 |
left(degree) | 将画笔向左旋转degree度 |
penup() | 抬起画笔 |
pendown() | 落下画笔 |
circle(r, extent) | 绘制一个指定半径、弧度的圆 |
pencolor(color) | 设置画笔颜色 |
pensize(width) | 设置画笔宽度 |
fillcolor(color) | 设置填充颜色 |
begin_fill() | 准备开始填充图形 |
end_fill() | 填充完成 |
hideturtle() |
隐藏画笔的turtle 的形状
|
showturtle() |
显示画笔的turtle 的形状
|
write(s) | 写文本,s为文本内容 |
goto(x,y) | 让画笔移动到指定位置 |
pos() | 返回当前画笔的坐标 |
剩下的的,就靠大家发挥创意,看怎么画出好玩的图像来,这里附两张网友作品给大家欣赏一下
附录:常用颜色
这里提供几种常见色值名,大家可以都试一试
色值名 | 颜色 |
---|---|
white | 白色 |
yellow | 黄色 |
blue | 蓝色 |
black | 黑色 |
green | 绿色 |
purple | 紫色 |
pink | 粉红色 |
gray | 灰色 |
gold | 金色 |
cyan | 青色 |
tomato | 番茄色 |
请关注公众号:编程之路从0到1
只要关注,即可获取网盘资源!
配合本教程,还有视频讲解哦,不容错过
给普通人的Python——第四章相关推荐
- 【python第四章——序列(列表、元组、字典、集合、字符串、正则)】
python第四章--序列 第四章--序列 4.1列表 4.2元组 4.3字典 4.4集合 4.5字符串(重要) 4.6正则表达式 第四章--序列 概念:序列指一块可存放多个值的连续内存空间,这些值按 ...
- Python第四章-字典
第四章 字典-当索引不好用时 4.0 字典可以理解成是C++里的map,可以映射任何类型.字典这种结构类型称为映射(mapping). 字典是Python中唯一内建的映射类型,字典中的值并 ...
- 浙江大学pta答案python第四章_浙大PTA-Python题库 编程题第一章(1-1~1-3)题解
其他各章题解链接如下 浙大PTA-Python题库 编程题第一章(1-1~1-3)题解 https://blog.csdn.net/zimuzi2019/article/details/1070206 ...
- Python(第四章) 序列的应用
第四章 本章概览 在Python中序列是最基本的数据结构.它是一块用于存放多个值的连续内存空间.Python中内置了5个常用的序列结构,分别是:列表.元组.集合.字典.字符串,本章详细讲解列表.元组. ...
- python第四章课后答案4.7_Python数据分析实战作业 第四章 Python数据分析实战 习题...
第四章 Python数据分析实战 习题(数据见附件sizhang.xlsx) 班主任现有一班级的两张表,如下. 表一:成绩表 学 号C#线 代Python 16010203788896 表二:信息表 ...
- 给普通人的Python——第五章(上)
文章目录 5. 代码重复使用的艺术:函数 5.1 一个例子引入 5.2 定义函数 5.3 使用函数重构代码 请关注公众号:编程之路从0到1 5. 代码重复使用的艺术:函数 编程中的函数和我们数学中的函 ...
- Python第四章课后练习
练习4-1:比萨 想出至少三种你喜欢的比萨,将其名称存储在一个列表中,再使用for 循环将每种比萨的名称打印出来.修改这个for 循环,使其打印包含比萨名称的句子,而不 仅仅是比萨的名称.对于每种比 ...
- 阿尔法python 第四章 程序的控制结构
程序的控制结构 年龄换算 平闰年 考试评级 大小写转换 判断位数并打印各位的值 回文数 地铁车票 判断星期 身体质量指数BMI 乞丐 水仙花数 篮球弹跳 阶乘 猴子摘桃 冰雹猜想 忽略倍数 素数 输出 ...
- python第四章答案猜数游戏_猜数游戏python
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 本文实例为大家分享了python实现猜数游戏的具体代码,供大家参考,具体内容如下 ...
- python第四章单元测试_MOOC选修课答案第四章单元测试答案_Sar编程基础期末答案...
在RLC串联电路中,已知R=100Ω,L=25mH,C=8μF,端电压为,求:电路中的总阻抗Z,电流,各元件上的电压,并画出电流和各电压的相量图.51acff1e9e93fa13124fd75b1b5 ...
最新文章
- 重构:改善饿了么交易系统的设计思路
- CreateProcess返回错误998
- python三种基本控制结构_Python学习手册之控制结构(一)
- 使用PerfView监测.NET程序性能(二):Perfview的使用
- MySQL表结构设计之范式化和反范式化对比
- 大班音乐机器人反思_幼儿园大班音乐律动教案《伦敦桥》含反思
- 看贴回帖 感受与感动
- 中国物联网激荡 20 年
- leancloud 怎么绑定域名_云引擎支持绑定加速域名 | LeanCloud 八月变化
- CAD安装失败Failed Installation aborted, Result=1603
- 达梦数据库连接工具简介
- C++输入两个正整数m和n,求其最大公约数和最小公倍数。
- Java程序员的薪资取决于工作年限还是技术?
- 中国联通将 900MHz 频段频谱资源重耕用于 5G 系统,更有利用把5G网络覆盖到边远地区的每一寸土地
- 西电计组实验一 存储器实验
- 网络、浏览器专题重点知识(含原理)
- 学习xpath解析用的代码
- IDea中maven项目实现对接企查查、启信宝案例
- Vue项目二:设置标题搜索栏,以及图片的轮播。
- 亮相博鳌大会:格创东智为制造业打造工业互联网+绿色低碳解决方案
热门文章
- 项目组织与团队管理——社会惰化
- ubunto18.04更新源详细操作
- Reflector、ReflectorFactory的前世
- layaair的TS版本报错问题
- 凝思Linux6.0.60安装卸载NVIDIA显卡驱动
- Defaulting to user installation because normal site-packages is not writeable
- HDLC(High-Level Data Link Control)(对比以太网)
- windows无法格式化u盘_如何解决u盘0字节无法格式化的问题
- 量子计算机基地边缘,为什么三体人可以吊打地球文明?记忆继承、思想共享是关键...
- 阿里云服务器安装宝塔流程