文章目录

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

上面代码的注释已经写得很详细了,penuppendown这些函数名也都很好认,只有一点要说明,那就是只有当我们的画笔是落下状态时,向前或向后移动才能画出线条,而当我们调用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——第四章相关推荐

  1. 【python第四章——序列(列表、元组、字典、集合、字符串、正则)】

    python第四章--序列 第四章--序列 4.1列表 4.2元组 4.3字典 4.4集合 4.5字符串(重要) 4.6正则表达式 第四章--序列 概念:序列指一块可存放多个值的连续内存空间,这些值按 ...

  2. Python第四章-字典

    第四章 字典-当索引不好用时 4.0     字典可以理解成是C++里的map,可以映射任何类型.字典这种结构类型称为映射(mapping).   字典是Python中唯一内建的映射类型,字典中的值并 ...

  3. 浙江大学pta答案python第四章_浙大PTA-Python题库 编程题第一章(1-1~1-3)题解

    其他各章题解链接如下 浙大PTA-Python题库 编程题第一章(1-1~1-3)题解 https://blog.csdn.net/zimuzi2019/article/details/1070206 ...

  4. Python(第四章) 序列的应用

    第四章 本章概览 在Python中序列是最基本的数据结构.它是一块用于存放多个值的连续内存空间.Python中内置了5个常用的序列结构,分别是:列表.元组.集合.字典.字符串,本章详细讲解列表.元组. ...

  5. python第四章课后答案4.7_Python数据分析实战作业 第四章 Python数据分析实战 习题...

    第四章 Python数据分析实战 习题(数据见附件sizhang.xlsx) 班主任现有一班级的两张表,如下. 表一:成绩表 学 号C#线 代Python 16010203788896 表二:信息表 ...

  6. 给普通人的Python——第五章(上)

    文章目录 5. 代码重复使用的艺术:函数 5.1 一个例子引入 5.2 定义函数 5.3 使用函数重构代码 请关注公众号:编程之路从0到1 5. 代码重复使用的艺术:函数 编程中的函数和我们数学中的函 ...

  7. Python第四章课后练习

    练习4-1:比萨  想出至少三种你喜欢的比萨,将其名称存储在一个列表中,再使用for 循环将每种比萨的名称打印出来.修改这个for 循环,使其打印包含比萨名称的句子,而不 仅仅是比萨的名称.对于每种比 ...

  8. 阿尔法python 第四章 程序的控制结构

    程序的控制结构 年龄换算 平闰年 考试评级 大小写转换 判断位数并打印各位的值 回文数 地铁车票 判断星期 身体质量指数BMI 乞丐 水仙花数 篮球弹跳 阶乘 猴子摘桃 冰雹猜想 忽略倍数 素数 输出 ...

  9. python第四章答案猜数游戏_猜数游戏python

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 本文实例为大家分享了python实现猜数游戏的具体代码,供大家参考,具体内容如下 ...

  10. python第四章单元测试_MOOC选修课答案第四章单元测试答案_Sar编程基础期末答案...

    在RLC串联电路中,已知R=100Ω,L=25mH,C=8μF,端电压为,求:电路中的总阻抗Z,电流,各元件上的电压,并画出电流和各电压的相量图.51acff1e9e93fa13124fd75b1b5 ...

最新文章

  1. 重构:改善饿了么交易系统的设计思路
  2. CreateProcess返回错误998
  3. python三种基本控制结构_Python学习手册之控制结构(一)
  4. 使用PerfView监测.NET程序性能(二):Perfview的使用
  5. MySQL表结构设计之范式化和反范式化对比
  6. 大班音乐机器人反思_幼儿园大班音乐律动教案《伦敦桥》含反思
  7. 看贴回帖 感受与感动
  8. 中国物联网激荡 20 年
  9. leancloud 怎么绑定域名_云引擎支持绑定加速域名 | LeanCloud 八月变化
  10. CAD安装失败Failed Installation aborted, Result=1603
  11. 达梦数据库连接工具简介
  12. C++输入两个正整数m和n,求其最大公约数和最小公倍数。
  13. Java程序员的薪资取决于工作年限还是技术?
  14. 中国联通将 900MHz 频段频谱资源重耕用于 5G 系统,更有利用把5G网络覆盖到边远地区的每一寸土地
  15. 西电计组实验一 存储器实验
  16. 网络、浏览器专题重点知识(含原理)
  17. 学习xpath解析用的代码
  18. IDea中maven项目实现对接企查查、启信宝案例
  19. Vue项目二:设置标题搜索栏,以及图片的轮播。
  20. 亮相博鳌大会:格创东智为制造业打造工业互联网+绿色低碳解决方案

热门文章

  1. 项目组织与团队管理——社会惰化
  2. ubunto18.04更新源详细操作
  3. Reflector、ReflectorFactory的前世
  4. layaair的TS版本报错问题
  5. 凝思Linux6.0.60安装卸载NVIDIA显卡驱动
  6. Defaulting to user installation because normal site-packages is not writeable
  7. HDLC(High-Level Data Link Control)(对比以太网)
  8. windows无法格式化u盘_如何解决u盘0字节无法格式化的问题
  9. 量子计算机基地边缘,为什么三体人可以吊打地球文明?记忆继承、思想共享是关键...
  10. 阿里云服务器安装宝塔流程