第二周:python基本图形绘制
2.1 深入理解python语言
2.1.1 计算机技术的演进
-
1946-1981:计算机系统结构时代-----CPU,操作系统…-----解决计算能力问题
-
1981-2008:网络和视窗时代------Windows视窗操作系统,互联网-----解决人机交互(通过Windows视窗),机机交互(通过网络)
2008安卓系统诞生
- 2008-2016:复杂信息系统时代------云计算,网络安全,大数据-----解决数据问题
2016年计算机Alphgo打败柯洁。
- 2016- :人工智能时代------解决人类自身问题,使用计算机帮助人类解决一些问题
2.1.2 编程语言的多样初心
编程语言也是一个江湖
- C语言:指针、内存、数据类型
语言本质:理解计算机系统机构
解决问题:性能,诞生于计算机系统结构时代,是用来写操作系统的语言
- Java语言:对象、跨平台、运行时
语言本质:理解主客体的关系
解决问题:跨平台
- C++:对象、多态、继承
语言本质:理解主客体的关系
解决问题:大规模程序
- VB(.NET):对象、按钮、文本框
语言本质:理解交互逻辑
解决问题:桌面应用(使用较少了)
- python:编程逻辑,第三方库
语言本质:理解问题的求解
解决问题:各类问题(适合于所有的专业)
2.1.3 python语言的特点
-通用语言、强制可读性、较少的底层语法元素、支持多种编程方式、支持中文字符
-语法简洁,代码行数少
-生态高产,超13万个第三方库,避免重复造轮子,提高代码的复用
不可替代的前端技术:HTML/CSS/JS
后端语言候选之一:python
工具决定思维
2.1.4 “超级语言”的诞生
机器语言:二进制语言,是CPU可以直接执行的语言,但是可读性非常差,与CPU型号有关
汇编语言:将二进制代码直接对应助记符,需要汇编器转换,与CPU型号有关
上述两种语言不适合编程
高级语言:更接近于自然语言,同时更容易描述计算问题,需要编译器或解释器转换成计算机CPU可以执行的二进制代码,与CPU型号无关
超级语言:不仅要接近自然语言,不仅要与CPU型号无关,还要可以粘性整合已有的程序,具备庞大的计算生态
现在关键是怎么复用代码,怎么使用已有的程序模块去实现位置的功能
python是目前具有最庞大计算生态的语言-----超级语言
2.2 实例2:python蟒蛇的绘制
2.2.1 “python蟒蛇绘制”问题分析
2.2.2 “python蟒蛇绘制”实例编写
import turtle
turtle.setup(650, 350, 200, 200)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(25)
turtle.pencolor("purple")
turtle.seth(-40)
for i in range(4):
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.2.3 “python蟒蛇绘制”举一反三
程序参数改变
颜色:黑色,白色,七彩色
长度:1,2,3节长度
爬行方向:向左走,斜着走
计算问题扩展
绘制其他形状:五角星,圆形等等
2.3 模块1:turtle库的使用
2.3.1 turtle库基本介绍
turtle库是turtle绘图体系的python实现。
turtle库是python语言的标准库之一
python计算生态=标准库+第三方库
标准库:随解释器直接安装到操作系统中的功能模块
第三方库:需要经过安装才能够使用的功能模块
-库Librarry,包Package,模块Module,统称为模块
2.3.2 turtle绘图窗体布局
# setup()函数用来设置窗体的大小和位置
turtle.setup(width, height, startx, starty)
# 四个参数:窗体本身的宽度和高度,窗体的显示位置(相对于电脑屏幕左上角的位置)
2.3.3 turtle空间坐标体系
turtle空间坐标体系包括:绝对坐标和海龟坐标
-
绝对坐标
turtle.goto(x,y) # 该函数表示海龟从窗体的中心位置出发,到达终点(x,y)的位置
例如:
-
海龟坐标
2.3.4 turtle角度坐标体系
-
绝对角度
-
海龟角度
2.3.5 RGB色彩体系
RGB指的是红蓝绿三个通道的颜色组合
覆盖视力所能感知的所有颜色
RGB每色取值范围0-255整数或者0-1小数
turtle.colormode(1.0) # 表示下面的代码中RGB使用小数值
turtle.colormode(255) # 表示下面的代码中RGB使用整数值
2.4 turtle程序语法元素分析
2.4.1 库引用与import
库引用:扩充python程序功能的方式。
使用import保留字完成,采用.()编码风格
import<库名>
<库名>.<函数名>(<函数参数>)
import的多种使用方法:
1.import<库名>
2.from<库名>import<函数名>
3.from<库名>impot*
<函数名>(<函数参数>)
4.import<库名>as<库别名>
<库别名>.<函数名>(<函数参数>) 给调用的外部库关联一个更短、更适合自己的名字
# 库引用方法一 # 库引用方法三
import turtle from turlte import*
turtle.setup(650, 350, 200, 200) setup(650, 350, 200, 200)
turtle.penup() penup()
turtle.fd(-250) fd(-250)
turtle.pendown() pendown()
turtle.pensize(25) pensize(25)
turtle.pencolor("purple") pencolor("purple")
turtle.seth(-40) seth(-40)
for i in range(4): for i in range(4):
turtle.circle(40, 80) circle(40, 80)
turtle.circle(-40, 80) circle(-40, 80)
turtle.circle(40, 80/2) circle(40, 80/2)
turtle.fd(40) fd(40)
turtle.circle(16, 180) circle(16, 180)
turtle.fd(40 * 2/3) fd(40 * 2/3)
turtle.done() done()
# 虽然方法三必须要再每次都输入库名,但是当程序数量巨大,会造成函数名的重复。
# 库引用方法四(比较简便,且不容易出错)
import turtle as t
t.setup(650, 350, 200, 200)
t.penup()
t.fd(-250)
t.pendown()
t.pensize(25)
t.pencolor("purple")
t.seth(-40)
for i in range(4):
t.circle(40, 80)
t.circle(-40, 80)
t.circle(40, 80/2)
t.fd(40)
t.circle(16, 180)
t.fd(40 * 2/3)
t.done()
2.4.2 turtle画笔控制函数
画笔设置之后一直有效,直至下次重新设置。
-
turtle.penup() 抬起画笔,相当于海龟在飞行,此时画笔并不在画布上留下线条
-
turtle.pendown() 画笔落下,让海龟爬行
一般是使用turtle.penup让海龟飞到一个位置,然后再turtle.pendown,使海龟落下,然后让海龟爬行,在画布上面画出图像。
-
turtle.pensize(width) 设置画笔的宽度,这个宽度相当于海龟的腰围。也可以使用别名turtle.width(width),功能是一样的。
-
turtle.pencolor(color) color为颜色字符串或r,g,b值。画笔颜色,相当于海龟在涂装
pencolor(color) color参数可以有三种形式:
颜色字符串:turtle.pencolor(“purple”)
RGB的小数值:turtle.pencolor(0.63,0.13,0.94)
RGB的元组值:turtle.pencolor((0.63,0.13,0.94))
2.4.3 turtle运动控制函数
控制海龟行进方向,可以使海龟走直线或者走曲线
-
turtle.forward(d),别名turtle.fd(d) 。向前行进,海龟走直线。d:行进距离,可以是负数,代表海龟倒退。单位是像素
-
turtle.circle(r, extent=None)。根据半径r绘制extent角度的弧度,r:是海龟行进曲线的半径,圆心默认在海龟左侧r距离的位置上
2.4.4 turtle方向控制函数
控制海龟面对的方向,包含绝对角度和海龟角度
- turtle.setheading(angle),别名turtle.seth(angle)。它改变的是绝对角度。可以改变海龟的朝向,使得海龟转一个角度。angle指的是将当前海龟方向改变一个角度。
-
turtle.left(angle)。在海龟视角下向左转。
turtle.right(angle)。在海归视角下向右转。angle表示在海龟当前行进方向上旋转的角度。他们改变的是海龟角度
2.4.5 循环语句与range()函数
for <变量> in range (<参数>):
<被循环执行的语句>
—<变量>表示每次循环的计数,0到<次数>-1
for i in range(5):
print(i)
# 结果:
0
1
2
3
4
for i in range(5):
print('Hello:', i) # print参数之间加逗号的作用是输出有空格
# 结果:
Hello: 0
Hello: 1
Hello: 2
Hello: 3
Hello: 4
range()函数是产生循环计数序列
—range(N) 产生0到N-1的整数序列,共有N个数。例如range(5) 0,1,2,3,4
—range(M,N)产生M到N-1的整数序列,共N-M个数。例如 range(2,5) 2,3,4
—最重要的作用是和for in搭配产生计数循环
2.4.6 “python蟒蛇绘制”代码分析
import turtle # 引入turtle库
turtle.setup(650, 350, 200, 200) # 设置窗体的大小和位置
turtle.penup() # 使海龟画笔抬起,即使得海龟飞起来
turtle.fd(-250) # 使得海龟后退250像素,即海龟从中心位置移动到窗体左侧的位置
turtle.pendown() # 海龟画笔落下
turtle.pensize(25) # 设置海龟画笔的宽度为25
turtle.pencolor("purple") # 设置海龟画笔的颜色为紫色,也可以设置为其他的颜色
turtle.seth(-40) # 设置绝对角度,使得海龟在当前方向逆时针旋转40度
for i in range(4):
turtle.circle(40, 80) # 在当前方向以40为半径,(圆心在左侧)走一个80度的弧度
turtle.circle(-40, 80) # 在当前方向以40为半径,(圆心在右侧)走一个80度的弧度
# 如此循环四次即可获得蟒蛇的四节身体
turtle.circle(40, 80/2) # 在当前方向以40为半径,(圆心在左侧)走一个40度的弧度,确定好蟒蛇的脖子
turtle.fd(40)
turtle.circle(16, 180)
turtle.fd(40 * 2/3)
turtle.done() # 程序执行完毕后,保持窗体不关闭。需要手动关闭。