700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > MOOC·嵩天老师团队·北京理工大学:《Python语言程序设计》自学笔记

MOOC·嵩天老师团队·北京理工大学:《Python语言程序设计》自学笔记

时间:2020-08-16 18:23:39

相关推荐

MOOC·嵩天老师团队·北京理工大学:《Python语言程序设计》自学笔记

前言

小编想使用python快速筛选文献、股票信息提取、写批处理脚本等,最近学习了股票信息提取,发现半年前学的基础知识已经忘完了,而且还没有笔记查询。本文参考MOOC·嵩天老师团队·北京理工大学:《Python语言程序设计》的课件,完整地整理了一遍。码字不易,希望转载本文时,注明出处。

在本科期间,大多数人奉行“不挂科”主义,上课效率不是很高,基础知识不牢固,导致需要用编程知识的时候只能重新去查找学习,说的就是小编!(小编读本科时,没有开设python这门课)

还有就是对于Python语言,肯定会有大批的本科学生去学习,希望本文对读者有积极的作用。

课程导学

学习python的基本要求:

会使用计算机和Office软件阅读简单英文内容、3级及以上水平熟练使用Web浏览器每周至少1-2个小时,连续9周

第1章 Python基本语法元素

1.1 程序设计基本方法1.2 Python开发环境配置1.3 实例1: 温度转换1.4 Python程序语法元素分析

方法论

程序的基本编写方法:IPO

实践能力

看懂10行左右简单Python代码

1.1程序设计基本方法

1.1.1 计算机与程序设计1.1.2 编译和解释1.1.3 程序的基本编写方法1.1.4 计算机编程

1.1.1 计算机与程序设计

计算机的概念

计算机是根据指令操作数据的设备

功能性

对数据的操作,表现为数据计算、输入输出处理和结果存储等可编程性

根据一系列指令自动地、可预测地、准确地完成操作者的意图

摩尔定律Moore’s Law

计算机发展历史上最重要的预测法则,目前面临着失效的风险

Intel公司创始人之一戈登·摩尔在1965年提出单位面积集成电路上可容纳晶体管的数量约每两年翻一番CPU/GPU、内存、硬盘、电子产品价格等都遵循摩尔定律

计算机的发展

计算机发展参照摩尔定律,表现为指数形式

计算机硬件所依赖的集成电路规模参照摩尔定律发展计算机运行速度因此也接近几何级数快速增长计算机高效支撑的各类运算功能不断丰富发展当今世界,唯一长达50年有效且按照指数发展的技术领域计算机深刻改变人类社会,甚至可能改变人类本身可预见的未来30年,摩尔定律还将持续有效

程序设计

程序设计是计算机可编程性的体现

程序设计,亦称编程,深度应用计算机的主要手段程序设计已经成为当今社会需求量最大的职业技能之一很多岗位都将被计算机程序接管,程序设计将是生存技能

程序设计语言

程序设计语言是一种用于交互(交流)的人造语言

程序设计语言,亦称编程语言,程序设计的具体实现方式编程语言相比自然语言更简单、更严谨、更精确编程语言主要用于人类和计算机之间的交互

编程语言种类很多,但生命力强劲的却不多

编程语言有超过600种,绝大部分都不再被使用C语言诞生于1972年,它是第一个被广泛使用的编程语言Python语言诞生于1990年,它是最流行最好用的编程语言

1.1.2 编译和解释

计算机执行源程序两种方式:编译和解释

源代码:采用某种编程语言编写的计算机程序,人类可读

例如:result = 2 + 3目标代码:计算机可直接执行,人类不可读 (专家除外)

例如:11010010 00111011

编译

将源代码一次性转换成目标代码的过程。

执行编译过程的程序叫编译器(compiler)。

解释

将原代码逐条转换成目标代码同时逐条运行的过程。

执行解释过程的程序叫解释器(interpreter)。

编译和解释的对比

编译:一次性翻译,之后不再需要源代码(类似英文翻译),就是程序写好,run一下解释:每次程序运行时随翻译随执行(类似实时的同声传译),就是在命令解释器shell中,敲一句,运行一句

静态语言和脚本语言

根据执行方式不同,编程语言分为两类

静态语言:使用编译执行的编程语言(C/C++,java)脚本语言:使用解释执行的编程语言(Python,JavaScript,PHP)

执行方式不同,优势各有不同

静态语言:编译器一次性生成目标代码,优化更充分;程序运行速度更快脚本语言:执行程序时需要源代码,维护更灵活;源代码在维护灵活、跨多个操作系统平台

1.1.3 程序的基本编写方法

IPO

程序的基本编写方法

I:Input 输入,程序的输入P:Process 处理,程序的主要逻辑O:Output 输出,程序的输出

理解IPO

输入

程序的输入

文件输入、网络输入、控制台输入、交互界面输入、内部参数输入等输入是一个程序的开始

输出

程序的输出

控制台输出、图形输出、文件输出、网络输出、操作系统内部变量输出等输出是程序展示运算结果的方式

处理

处理是程序对输入数据进行计算产生输出结果的过程处理方法统称为算法,它是程序最重要的部分算法是一个程序的灵魂

问题的计算部分

一个待解决问题中,可以用程序辅助完成的部分

计算机只能解决计算问题,即问题的计算部分一个问题可能有多种角度理解,产生不同的计算部分问题的计算部分一般都有输入、处理和输出过程

编程解决问题的步骤(6步)

分析问题:分析问题的计算部分,想清楚划分边界:划分问题的功能边界,规划IPO设计算法:设计问题的求解算法,关注算法编写程序:编写问题的计算程序,编程序调试测试:调试程序使正确运行,运行调试升级维护:适应问题的升级维护,更新完善

求解计算问题的精简步骤(3步)

确定IPO:明确计算部分及功能边界编写程序:将计算求解的设计变成现实调试程序:确保程序按照正确逻辑能够正确运行

1.1.4 计算机编程

Q:为什么要学习计算机编程?

A:因为“编程是件很有趣的事儿”!

能够训练思维

编程体现一种抽象交互、自动化执行的思维方式计算思维:区分逻辑思维和实证思维的第三种思维模式。能够促进人类思考,增进观察力和深化对交互关系的理解

编程能够增进认识

编程不单纯是求解计算问题不仅要思考解决方法,还要思考用户体验、执行效率等能够帮助程序员加深用户行为以及社会和文化认识

编程能够带来乐趣

编程能够提供展示自身思想和能力的舞台让世界增加新的颜色、让自己变得更酷、提升心理满足感在信息空间里思考创新、将创新变为现实

编程能够提高效率

能够更好地利用计算机解决问题显著提高工作、生活和学习效率为个人理想实现提供一种借助计算机的高效手段

编程带来就业机会

程序员是信息时代最重要的工作岗位之一国内外对程序员岗位的缺口都在百万以上规模计算机已经渗透于各个行业, 就业前景非常广阔

学习编程的误区

Q:编程很难学吗? A:掌握方法就很容易!

首先,掌握编程语言的语法,熟悉基本概念和逻辑其次,结合计算问题思考程序结构,会使用编程套路最后,参照案例多练习多实践,学会举一反三次

单元小结

程序设计基本方法

计算机的功能性和可编程性编译和解释、静态语言和脚本语言IPO、理解问题的计算部分掌握计算机编程的价值

1.2 Python开发环境配置

1.2.1 Python语言概述1.2.2 Python基本开发环境IDLE1.2.3 Python程序编写与运行1.2.4 Python高级开发环境VSCode

1.2.1 Python语言概述

Python语言创立者:Guido van Rossum

2002年,Python 2.x

,Python 3.x(现在都在学这个)

Python语言是一个由编程牛人领导设计并开发的编程语言Python语言是一个有开放、开源精神的编程语言Python语言应用于火星探测、搜索引擎、引力波分析等众多领域

1.2.2 Python基本开发环境IDLE

Python官方提供 适用于小规模程序开发

Python官方环境:Python解释器 + IDLE开发环境

轻量级:只有几十MB大小,使用灵活

功能丰富:编辑器+交互环境+标准库+库安装工具…

下载地址: /downloads

或者: www.python123.io/downloads(推荐这个网址,下载速度快)

具体配置方法,去MOOC查看课程,或者点击此处调转B站查看

1.2.3 Python程序编写与运行

Python的两种编程方式

交互式和文件式

交互式:对每个输入语句即时运行结果,适合语法练习文件式:批量执行一组语句并运行结果,编程的主要方式

实例1: 圆面积的计算

根据半径r计算圆面积

交互式

>>> r = 25>>> area = 3.1415 * r * r>>> print(area)1963.4375000000002>>> print(" {:.2f}".format(area))1963.44

文件式

#保存为CalCircle.py文件并运行r = 25area = 3.1415 * r * rprint(area)print(" {:.2f}".format(area))

输出结果如下:

1963.43750000000021963.44

实例2:同切圆绘制

绘制多个同切圆

交互式

>>> import turtle>>> turtle.pensize(2)>>> turtle.circle(10)>>> turtle.circle(40)>>> turtle.circle(80)>>> turtle.circle(100)

文件式

#保存为TangentCirclesDraw.py文件并运行import turtleturtle.pensize(2)turtle.circle(10)turtle.circle(40)turtle.circle(80)turtle.circle(100)

输出结果如下:

实例3: 五角星绘制

绘制一个五角星

交互式

>>> from turtle import *>>> color('red', 'red')>>> begin_fill()>>> for i in range(5):fd(200)rt(144)>>> end_fill()>>>

文件式

#保存为StarDraw.py文件并运行from turtle import *color('red', 'red')begin_fill()for i in range(5):fd(200)rt(144)end_fill()done()

输出结果如下:

1.2.4 Python高级开发环境VSCode

VSCode:Visual Studio Code

微软出品,与Visual Studio同质量的专业级开发工具跨平台免费工具:支持Windows/Linux/MacOS编辑器模式:轻量级、功能丰富、可扩展性强…小编没用过这个,一开始用的就是PyCharm社区版本,后来用了notepad++和Gvim

第一步:安装IDLE环境;第二步:安装VSCode

下载地址: 工具大小约 50MB

单元小结

Python开发环境配置

Python语言的发展历史选取一种系统平台构建Python开发环境尝试编写与运行3个Python小程序

1.3 实例1:温度转换

题目本身简单,但学会这种思维,其他常见的"转换"问题解决方法同理。

1.3.1 "温度转换"问题分析

温度转换

温度刻画的两种不同体系

摄氏度:中国等世界大多数国家使用

以1标准大气压下水的结冰点为0度,沸点为100度,将温度进行等分刻画华氏度:美国、英国等国家使用

以1标准大气压下水的结冰点为32度,沸点为212度,将温度进行等分刻画

需求分析

两种温度体系的转换

摄氏度转换为华氏度华氏度转换为摄氏度

问题分析

该问题中计算部分的理解和确定

理解1:直接将温度值进行转换理解2:将温度信息发布的声音或图像形式进行理解和转换理解3:监控温度信息发布渠道,实时获取并转换温度值

分析问题

采用 理解1:直接将温度值进行转换

温度数值需要标明温度体系,即摄氏度或华氏度

转换后也需要给出温度体系

划分边界

输入:带华氏或摄氏标志的温度值处理:根据温度标志选择适当的温度转换算法输出:带摄氏或华氏标志的温度值

输入输出格式设计

标识放在温度最后,F表示华氏度,C表示摄氏度

82F表示华氏82度,28C表示摄氏28度

设计算法

根据华氏和摄氏温度定义,利用转换公式如下:

C = ( F – 32 ) / 1.8

F = C * 1.8 + 32

其中, C表示摄氏温度, F表示华氏温度

1.3.2"温度转换"实例编写

#TempConvert.pyTempStr = input("请输入带有符号的温度值: ")if TempStr[-1] in ['F', 'f']:C = (eval(TempStr[0:-1]) - 32)/1.8print("转换后的温度是{:.2f}C".format(C))elif TempStr[-1] in ['C', 'c']:F = 1.8*eval(TempStr[0:-1]) + 32print("转换后的温度是{:.2f}F".format(F))else:print("输入格式错误")

1.3.4 举一反三

Python语法元素理解

温度转换程序共10行代码,但包含很多语法元素清楚理解这10行代码能够快速入门Python语言参考框架结构、逐行分析、逐词理解

输入输出的改变

温度数值与温度标识之间关系的设计可以改变标识改变放在温度数值之前:C82, F28标识字符改变为多个字符:82Ce、28Fa

计算问题的扩展

温度转换问题是各类转换问题的代表性问题货币转换、长度转换、重量转换、面积转换… - 问题不同,但程序代码相似

1.4 Python程序语法元素分析

1.4.1 程序的格式框架

代码高亮:编程的色彩辅助体系,不是语法要求

缩进:一行代码开始前的空白区域,表达程序的格式框架,表达代码间包含关系的唯一手段

缩进表达程序的格式框架

严格明确:缩进是语法的一部分,缩进不正确程序运行错误所属关系:表达代码间包含和层次关系的唯一手段长度一致:程序内一致即可,一般用4个空格或1个TAB

注释:用于提高代码可读性的辅助文字,不被执行。

1.4.2 命名与保留字

变量

用来保存和表示数据的占位符号,变量采用标识符(名字)来表示。

命名

用来保存和表示数据的占位符号

命名规则: 大小写字母、数字、下划线和中文等字符及组合

如: TempStr, Python_Great, 这是门Python好课注意事项: 大小写敏感、首字符不能是数字、不与保留字相同

Python和python是不同变量,123Python是不合法的

保留字

被编程语言内部定义并保留使用的标识符

Python语言有35个保留字(也叫关键字)

if, elif, else, in保留字是编程语言的基本单词,大小写敏感

if 是保留字,If 是变量

1.4.3 数据类型

数据类型:字符串、整数、浮点数、列表

字符串

由0个或多个字符组成的"有序"字符序列

字符串由一对单引号或一对双引号表示

"请输入带有符号的温度值: "或者 ‘C’字符串是字符的有序序列,可以对其中的字符进行索引

“请” 是 "请输入带有符号的温度值: " 的第0个字符

字符串的序号

字符串的使用

使用[ ]获取字符串中一个或多个字符

数字类型

由整数和浮点数都是数字类型

整数:数学中的整数

浮点数:数学中的实数,带有小数部分

列表

由0个或多个数据组成的"有序"序列

1.4.4 语句与函数

赋值语句:由赋值符号构成的一行代码

分支语句:由判断条件决定程序运行方向的语句

函数:根据输入参数产生不同输出的功能过程

Python程序的输入输出

输入函数input()

从控制台获得用户输入的函数

输出函数print()

以字符形式向控制台输出结果的函数

注:input()和print(),在控制台显示的时候,一个添加引号形成字符串,一个将字符串自动去掉引号。

补充:"eval()"去掉参数最外侧引号并执行余下语句的函数

评估函数 eval()

去掉参数最外侧引号并执行余下语句的函数

eval()函数的基本使用格式:eval(<字符串或字符串变量>)

>>> eval("1") 1>>> eval("1+2") 3>>> eval('"1+2"') '1+2'>>> eval('print("Hello")') Hello

单元小结

Python程序语法元素分析

缩进、注释、命名、变量、保留字数据类型、字符串、 整数、浮点数、列表赋值语句、分支语句、函数input()、print()、eval()、 print()格式化

第2章 Python基本图形绘制

2.1 深入理解Python语言2.2 实例2: Python蟒蛇绘制2.3 模块1: turtle库的使用2.4 turtle程序语法元素分析

方法论

Python语言及海龟绘图体系

实践能力

初步学会使用Python绘制简单图形

2.1 深入理解Python语言

2.1.1 计算机技术的演进2.1.2 编程语言的多样初心2.1.3 Python语言的特点2.1.4 "超级语言"的诞生

2.1.1 计算机技术的演进

2.1.2编程语言的多样初心

编程语言有哪些?

Basic, C, C++, C#, CSS, Fortran, Go, HTML, Java,

JavaScript, Lisp, Lua, Matlab, Object C, Pascal, Perl, PHP,

PostScript, Python, Ruby, Scala, SQL, Swift, VBA,

, Verilog, VHDL, Visual Basic

编程语言,也是一个江湖!

不同编程语言的初心和适用对象

各编程语言所处历史时期和使命不同,Python是计算时代演进的选择!

2.1.3 Python语言的特点

通用语言

脚本语言

开源语言

跨平台语言

多模型语言

如何看待Python语言?

人生苦短,我学python

C/C++:Python归Python,C归CJava:针对特定开发和岗位需求HTML/CSS/JS:不可替代的前端技术,全栈能力其他语言:R/Go/Matlab等,特定领域

工具决定思维:关注工具变革的力量!

2.1.4超级语言的诞生

机器语言 --> 代码直接执行,与CPU有关

汇编语言 --> 助记符,汇编器,与CPU有关

高级语言 --> 编译器,与CPU无关

超级语言 --> 整合已有程序,庞大计算生态

python是唯一的超级语言!

单元小结

深入理解Python语言

计算机系统结构时代到人工智能时代的演进路线五种编程语言的初心和历史使命Python语言的通用性、简洁性和生态性Python是以计算生态为标志的"超级语言"

2.2 实例2:Python蟒蛇绘制

2.2.1"Python蟒蛇绘制"问题分析

Python蟒蛇绘制

用程序绘制一条蟒蛇

貌似很有趣,可以来试试先学会蟒蛇绘制,再绘朵玫瑰花送给TA小编学完这一节,画了一个爱心——丘比特的箭

-问题1: 计算机绘图是什么原理?

一段程序为何能够产生窗体?为何能在窗体上绘制图形?

-问题2: Python蟒蛇绘制从哪里开始呢?

如何绘制一条线?如何绘制一个弧形?如何绘制一个蟒蛇?

2.2.2"Python蟒蛇绘制"实例编写

#PythonDraw.pyimport turtleturtle.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()

运行结果:

import turtle 导入海归绘图库

2.2.3"Python蟒蛇绘制"举一反三

Python语法元素理解

Python蟒蛇绘制共17行代码,但很多行类似清楚理解这17行代码能够掌握Python基本绘图方法参考框架结构、逐行分析、逐词理解

程序参数的改变

Python蟒蛇的颜色:黑色、白色、七彩色…Python蟒蛇的长度:1节、3节、10节…Python蟒蛇的方向:向左走、斜着走…

计算问题的扩展

Python蟒蛇绘制问题是各类图形绘制问题的代表

Python蟒蛇绘制问题是各类图像绘制问题的代表圆形绘制、五角星绘制、国旗绘制、机器猫绘制… - 掌握绘制一条线的方法,就可以绘制整个世界

2.3 模块1:turtle库的使用

2.3.1 turtle库基本介绍2.3.2 turtle绘图窗体布局2.3.3 turtle空间坐标体系2.3.4 turtle角度坐标体系2.3.5 RGB色彩体系

2.3.1 turtle库基本介绍

turtle库概述

turtle(海龟)库是turtle绘图体系的Python实现

turtle绘图体系:1969年诞生,主要用于程序设计入门Python语言的标准库之一入门级的图形绘制函数库

标准库

Python计算生态 = 标准库 + 第三方库

标准库:随解释器直接安装到操作系统中的功能模块第三方库:需要经过安装才能使用的功能模块库Library、包Package、模块Module,统称模块

turtle的原(wan)理(fa)

turtle(海龟)是一种真实的存在

有一只海龟,其实在窗体正中心,在画布上游走走过的轨迹形成了绘制的图形海龟由程序控制,可以变换颜色、改变宽度等

turtle的魅力

2.3.2 turtle绘图窗体布局

turtle的绘图窗体

2.3.3 turtle空间坐标体系

2.3.4 turtle角度坐标体系

2.3.5 RGB色彩体系

RGB色彩模式

由三种颜色构成的万物色

RGB指红蓝绿三个通道的颜色组合覆盖视力所能感知的所有颜色RGB每色取值范围0-255整数或0-1小数

常见RGB色彩

查看更多颜色,请点击链接:/yingyong/yanse-rgb-16/

注意:这个表格的颜色,使用了Markdown的颜色模式,也不算是Markdown独有的,其实是网页的XXX。本来不想整理这个的,但是看到这些颜色可以使自己更熟练使用Markdown调色模式

如:

<font color=#006191>前文一直用的这个颜色</font>但是,这么多色号,哪记得住呀,可以直接使用英文名称<font color=blue>我是蓝色</font><font color=pink>我是粉红色</font><font color=brown>我是棕色</font><font color=purple>我是紫色</font><font color=cyan>我是青色</font>__<font color=cyan>我是青色加粗</font>__······

上面这个框最终显示效果如下:

前文一直用的这个颜色

但是,这么多色号,哪记得住呀,下面是直接使用英文名称产生的效果

我是蓝色

我是粉红色

我是棕色

我是紫色

我是青色

我是青色加粗

···

–RGB指 红 蓝 绿 组合

–RGB整数值,小数值

–turtle.colormode(mode),默认小数值

单元小结

turtle库的海龟绘图法turtle.setup()调整绘图窗体在电脑屏幕中的布局画布上以中心为原点的空间坐标系: 绝对坐标&海龟坐标画布上以空间x轴为0度的角度坐标系: 绝对角度&海龟角度RGB色彩体系,整数值&小数值,色彩模式切换

2.4 turtle程序语法元素分析

2.4.1 库引用和 import

库引用

扩充Python程序功能的方式

使用import保留字完成,采用<a>.<b>()编码风格

import<库名>

<库名>.<函数名>(<函数参数>)

import 更多用法

使用from和import保留字共同完成

from <库名> import <函数名>

from <库名> import *

<函数名>(<函数参数>)

2.4.2 画笔控制函数

penup(),pendown(),pensize(),pencolor()

别名:pu(),pd()

pensize(width) --> 别名:width(width)

pencolor(color) 颜色字符串、rgb值(三个小数值,或 一个元组小数值)

画笔操作后一直有效,一般成对出现

turtle.penup() 别名 turtle.pu()

抬起画笔,海龟在飞行turtle.pendown() 别名 turtle.pd()

落下画笔,海龟在爬行

画笔设置后一直有效,直至下次重新设置

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.forward(d) 别名 turtle.fd(d)

向前行进,海龟走直线

d: 行进距离,可以为负数

turtle.circle(r, extent=None)

根据半径r绘制extent角度的弧形

r: 默认圆心在海龟左侧r距离的位置

extent: 绘制角度,默认是360度整圆

2.4.4 方向控制函数

控制海龟面对方向: 绝对角度 & 海龟角度

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)01234>>> for i in range(5):print("hello:",i)hello: 0hello: 1hello: 2hello: 3hello: 4

range()函数

产生循环计数序列

range(N)

产生 0 到 N-1的整数序列,共N个range(M,N)

产生 M 到 N-1的整数序列,共N-M个

range(5)0, 1, 2, 3, 4range(2, 5)2, 3, 4

2.4.6"Python蟒蛇绘制"代码分析

单元小结

turtle程序语法元素分析

库引用: import、from…import、import…as…penup()、pendown()、pensize()、pencolor()fd()、circle()、seth()循环语句:for和in、range()函数

第3章 基本数据类型

3.1 数字类型及操作3.2 实例3: 天天向上的力量3.3 字符串类型及操作3.4 模块2: time库的使用3.5 实例4: 文本进度条

方法论

Python数字及字符串类型

实践能力

初步学会编程进行字符类操作

3.1 数字类型及操作

3.1.1 整数类型3.1.2浮点数类型3.1.3复数类型3.1.4数值运算操作符3.1.5数值运算函数

3.1.1 整数类型

与数学中整数的概念一致

整数无限制 pow()

可正可负,没有取值范围限制pow(x,y)函数:计算 xy,想算多大算多大

>>> pow(2,100)1267650600228229401496703205376>>> pow(2,pow(2,15))14154610310449547890015530277449516013481307114723881672343857482723666342408452535960253564766484150754758729616561264923898085795447378488819382962508731917439277935449130110501626512779570298469602117832429335212075454134849698568518511412885151638299538905509746062209863567500335392922427858293566441626257277330815327751434648031337198861262948148356243817892895886777785007219831617484125195559099667645093640850803679630220367838448667914492847375182628131230834390372436784404208971399237782789527703123187783290048945470654890775968353960171536031700503713076244387270111137955448430971866230688377601047534844149360049194347904127199295331983064930106164727241438940877685164658948654886171641124473975626241632750150126655369981021293570066042305482486040883165635862835728637046058352403756085745691239473897891999085976345203704659967157427239535836507133656908815246080139195569461073015903729548307386443911380160653441311312076042640538974408289046620471832343775474272876919417415359465108829909044778631854737985283880604575689279436339239288726819275020295729631308408548537399370768810356461793830554834338760514020376144247489029690181591865198110515453679671037671828197091354790191316833093307973744081973398315272390407159081122130951267707176060012888988893707108962488623615038692052145369082581969217655930653253928363321425944111346034755093660281456903063506018592952612962633310186822763175677495345710587722355676795569202407891090705212539871310312639022930347443673569325099521888284753623113164452842286404894218092637384236309312430249145878639281347191861041646606053560015919627786463782954136597707826469792362890626164424180715710392825512893488482745228930595617178601940346982418048875312750781096036371604959075799953664196364170289275733916705807968185260742260950143751894385792160716775407660856056041061230366696674346777234726755644589916712684141008010314539177366659472849566748840353066212864651837986938525998033246198651818562444220792336872945085364085210874188739084982027105970804744802498188580114909305185127137988036291016387162785788741452144290261862766022890124845268300766473568287648783277267198164286789042079444568943931859830903470451768867323262539122976495244398804037014305667613803599255585227185428751758736724751077767893466447254864778704830633077086237001552585800547975647149922724490114280574976956418475321196722322621296416567885660489241698491509742296053412233345387698127924356576639179631160514922262832825533306154387752584602940450712889005318944252754466514151357113618712687491460166975039248610050756844204683178063103254057407794427445422808763924173681850516375991036513199063294746299320458521812243199232386424494739439043865635642403747193248445218654569210250347907059995382316519421101969676057526442680284830303180430573353222805018028603417516891882746062604226865829514070691504718904949257899665049400588233707115000486895619340659318483863369406840982390343714441737603917423501105322884685142421795517290291865100361098410840265092935939630563431304708872511303907681194009010985557828593782916421357661282221034795774594733104748252534660254265317689980927880823279655753183215024976925360066790226802966170014963286854195626611952804248653401477877984698176103315500726273016267595451887384710387051721829271917592295057169589539706361671082094809405871790468623234895914796464390019259167513771864832869036015645542195008456098615038348028400803005801944957156282746379539470250603755465358786281476086044567893715130635914946085361612372742732638037372287633897118303250036355897758209569010246051563429109255864938245524550802182743148097380750227756512203741052272159062052927519186670604753285932253677930610704221087338009838555075918064134609645855953163599711792842836047314686685454847613817475916397364534198964493234863970307763977612025904676375054733902222494567240932386825577627818395309382337512819996087113561478356551952366660563556788418898622840146740590529951702207114044450127666422033145923717125948779683432652102327981350232991173181917703651238070867043818097596022601516129968969942941860844756191381214552943895858742377916347012961245501796720594858382564458465305991376624808413443765039892446333450160708871981204214355757262371893121618180215480063895011823934417121420449530722640166767990116246203122464685546543715447173552277401576290867397106758452099921333420351440389610658926533921828756229326700677984339348917095198778507942194914479881601719323310064956202800941494643794501530854062250814718795858940879160921416237523451127510677031664036811623319202917408473889576323110533424261529473240116279222258785399350229746160627748391104890800941749728410681064567749929376909136285371930095877522208867090972389541486646440075631447028196203427653151254400972617464939993758173971811798241736098595825946848543658673368665977103067766467790540152236004189248195145413536054091741109841228672383067271291060338674813634887805654574611214211111665998578239827562712244941430714074940488406075386370602428103148553866613333283559781751461633172811898218062882365766866809962179984158020767772792912298768785614574416019320546196793486018677884550715870608004988829978148966980770136884353226949853654541655837029498017031085943660440466076019479435181045436897845351048788440102268677798257134774081674357195358847761226603653040273985441982221318087815835107317571211841215825606453348521097936413520295998260751040778703740366309871999114717441069182825782996299411623087415008910941303284182131584799816210728034255555687956785287887098941927737599159824398527573423117728252839768919145018117995597946282264946523741691180858441194373387098969530126834014923656627849129062189145572870212225909464530919531634090206371146321663797279805760028495288084848179380053931435604182517516600823936737919915974103591167638898871754018470172589234989397051893028574365288890303780239194622538215532212735555299397542845350629361560347195459286729561168235383428930828378887678197590624110372267338756668414899526138480866747114831414687579691636020586013635675559033488649721062244142787960404056961306176022981242840984825421797150393909713884990708008654327558025619074213270714252431515171638994505743475021858485281290000556297034226954250472095181775771285113154920596137223667246153439683573329241911780419567531329415963221012504170688139773034980339406137910997478677384469673403401026913955387821238710850815862283973359363491897561661336824388280839150924480680933788296533870154550469158951765047223958075418954764979003802650670770976309814874652403101380053189087685822736050167616187466194643164792957255599296729855347115269347145248011989760817333675326012445251081533341640935702963326517261420366332640997615310246708337912958811283728071111134649089894780840206240122896319416271165742299842926357927651541400097905374066273381663298150853512851844025800678239228886090382320743682079304188190709379187491763582985480815064089490712760043018501457398493533111918994100853753771956293430162566011361163168953462188010231819000213669780447856871248564377584509085888797883747538309181810700615032225563091016689474780253412571338625581817921061549352557588323659562675650563535186144754433556539747098322643609542486120512917463706713059064230762924353617972053492527119192658171851345957700772571841998176036269399889012480745075924980479390349332734102774400008134615405405710515069710039046234843447612634590546589381789537792813959654993670490013375956605889675966880659610760034758589022259465501043012312735166531686266348478596644626374062456487535164078092370300686810744079027168293604330487357964898997857175489884078918448012957044699102950475861639310648752332131250745403680866721007360214429005061961061473813954328564934698639321310245686379366551253365593194179053761902060473060144318125066687491711547360597117856977240817110039737153355212454745907787131179578656470567535050192702347739653312290522505871612897990429961857550031033665725647987982751868407294730437319505335782425290324427994308374960806684435416445907817107168298342945182985594111281499472495749501642418042734681158560450241309279063816746067016274795461832774699007774423895748677615395848493765672271957278664546343161609126810028254214659633625223934508931691728584028342356669332635458079957147833789501696835781748234884919093574276330354577841975249603899105407104895787598263630679206627796433754045597409176502438867600537016879169914474754840024311922169647388379952802523847080102439285112565751677726373884032544667890707135752142561924524490291100405379946274245324036988005651872121910877137407363811871907321136729551437670859653729420454409990359075437165617865696017021767583215326816459167400450023907374350264809910562454858749354482547927058974249449518122372232969334546863930699052311899564056704253136957713111315902738180807134699160451390645039821942630089920466243549257848566655397449272317385977748541292701606834151551743711513705037275027927854833279919379940015416644280142731007653709936073495221974791939759846168942055397357348278178050441024490005893818256958665388971229316805738460845250163322246468666174908324960849916901715830293526098364909081134646683438299853515905529452843725739782954850979508930724235186059820854871544701550252690258540446464965724484952253430962618963789314828832866575088592288684878441844790875384539741441870048843665612567234047721908475860085439613490711311917089432953376643841845327746615032459102574519235156077115597054781325560401976634149118851436979854648073092970029102505053022877694123374411993604245191607165528908828167963782968816418279814530352072337520635187827784937438277081099134931629321824276272610462801682699580775411226681046337123778561415461031044954789001553027744951601348130711472388167234385748272366634240845253596025356476648415075475872961656126492389808579544737848881938296250873191743927793544913011050162651277957029846960211783242933521207545413484969856851851141288515163829953890550974606220986356750033539292242785829356644162625727733081532775143464803133719886126294814835624381789289588677778500721983161748412519555909966764509364085080367963022036783844866791449284737518262813123083439037243678440420897139923778278952770312318778329004894547065489077596835396017153603170050371307624438727011113795544843097186623068837760104753484414936004919434790412719929533198306493010616472724143894087768516465894865488617164112447397562624163275015012665536998102129357006604230548248604088316563586283572863704605835240375608574569123947389789199908597634520370465996715742723953583650713365690881524608013919556946107301590372954830738644391138016065344131131207604264053897440828904662047183234377547427287691941741535946510882990904477863185473798528388060457568927943633923928872681927502029572963130840854853739937076881035646179383055483433876051402037614424748902969018159186519811051545367967103767182819709135479019131683309330797374408197339831527239040715908112213095126770717606001288898889370710896248862361503869205214536908258196921765593065325392836332142594411134603475509366028145690306350601859295261296263331018682276317567749534571058772235567679556920240789109070521253987131031263902293034744367356932509952188828475362311316445284228640489421809263738423630931243024914587863928134719186104164660605356001591962778646378295413659770782646979236289062616442418071571039282551289348848274522893059561717860194034698241804887531275078109603637160495907579995366419636417028927573391670580796818526074226095014375189438579216071677540766085605604106123036669667434677723472675564458991671268414100801031453917736665947284956674884035306621286465183798693852599803324619865181856244422079233687294508536408521087418873908498202710597080474480249818858011490930518512713798803629101638716278578874145214429026186276602289012484526830076647356828764878327726719816428678904207944456894393185983090347045176886732326253912297649524439880403701430566761380359925558522718542875175873672475107776789346644725486477870483063307708623700155258580054797564714992272449011428057497695641847532119672232262129641656788566048924169849150974229605341223334538769812792435657663917963116051492226283282553330615438775258460294045071288900531894425275446651415135711361871268749146016697503924861005075684420468317806310325405740779442744542280876392417368185051637599103651319906329474629932045852181224319923238642449473943904386563564240374719324844521865456921025034790705999538231651942110196967605752644268028483030318043057335322280501802860341751689188274606260422686582951407069150471890494925789966504940058823370711500048689561934065931848386336940684098239034371444173760391742350110532288468514242179551729029186510036109841084026509293593963056343130470887251130390768119400901098555782859378291642135766128222103479577459473310474825253466025426531768998092788082327965575318321502497692536006679022680296617001496328685419562661195280424865340147787798469817610331550072627301626759545188738471038705172182927191759229505716958953970636167108209480940587179046862323489591479646439001925916751377186483286903601564554219500845609861503834802840080300580194495715628274637953947025060375546535878628147608604456789371513063591494608536161237274273263803737228763389711830325003635589775820956901024605156342910925586493824552455080218274314809738075022775651220374105227215906205292751918667060475328593225367793061070422108733800983855507591806413460964585595316359971179284283604731468668545484761381747591639736453419896449323486397030776397761202590467637505473390222249456724093238682557762781839530938233751281999608711356147835655195236666056355678841889862284014674059052995170220711404445012766642203314592371712594877968343265210232798135023299117318191770365123807086704381809759602260151612996896994294186084475619138121455294389585874237791634701296124550179672059485838256445846530599137662480841344376503989244633345016070887198120421435575726237189312161818021548006389501182393441712142044953072264016676799011624620312246468554654371544717355227740157629086739710675845209992133342035144038961065892653392182875622932670067798433934891709519877850794219491447988160171932331006495620280094149464379450153085406225081471879585894087916092141623752345112751067703166403681162331920291740847388957632311053342426152947324011627922225878539935022974616062774839110489080094174972841068106456774992937690913628537193009587752220886709097238954148664644007563144702819620342765315125440097261746493999375817397181179824173609859582594684854365867336866597710306776646779054015223600418924819514541353605409174110984122867238306727129106033867481363488780565457461121421111166599857823982756271224494143071407494048840607538637060242810314855386661333328355978175146163317281189821806288236576686680996217998415802076777279291229876878561457441601932054619679348601867788455071587060800498882997814896698077013688435322694985365454165583702949801703108594366044046607601947943518104543689784535104878844010226867779825713477408167435719535884776122660365304027398544198222131808781583510731757121184121582560645334852109793641352029599826075104077870374036630987199911471744106918282578299629941162308741500891094130328418213158479981621072803425555568795678528788709894192773759915982439852757342311772825283976891914501811799559794628226494652374169118085844119437338709896953012683401492365662784912906218914557287021222590946453091953163409020637114632166379727980576002849528808484817938005393143560418251751660082393673791991597410359116763889887175401847017258923498939705189302857436528889030378023919462253821553221273555529939754284535062936156034719545928672956116823538342893082837888767819759062411037226733875666841489952613848086674711483141468757969163602058601363567555903348864972106224414278796040405696130617602298124284098482542179715039390971388499070800865432755802561907421327071425243151517163899450574347502185848528129000055629703422695425047209518177577128511315492059613722366724615343968357332924191178041956753132941596322101250417068813977303498033940613791099747867738446967340340102691395538782123871085081586228397335936349189756166133682438828083915092448068093378829653387015455046915895176504722395807541895476497900380265067077097630981487465240310138005318908768582273605016761618746619464316479295725559929672985534711526934714524801198976081733367532601244525108153334164093570296332651726142036633264099761531024670833791295881128372807111113464908989478084020624012289631941627116574229984292635792765154140009790537406627338166329815085351285184402580067823922888609038232074368207930418819070937918749176358298548081506408949071276004301850145739849353311191899410085375377195629343016256601136116316895346218801023181900021366978044785687124856437758450908588879788374753830918181070061503222556309101668947478025341257133862558181792106154935255758832365956267565056353518614475443355653974709832264360954248612051291746370671305906423076292435361797205349252711919265817185134595770077257184199817603626939988901248074507592498047939034933273410277440000813461540540571051506971003904623484344761263459054658938178953779281395965499367049001337595660588967596688065961076003475858902225946550104301231273516653168626634847859664462637406245648753516407809237030068681074407902716829360433048735796489899785717548988407891844801295704469910295047586163931064875233213125074540368086672100736021442900506196106147381395432856493469863932131024568637936655125336559319417905376190206047306014431812506668749171154736059711785697724081711003973715335521245474590778713117957865647056753505019270234773965331229052250587161289799042996185755003103366572564798798275186840729473043731950533578242529032442799430837496080668443541644590781710716829834294518298559411128149947249574950164241804273468115856045024130927906381674606701627479546183277469900777442389574867761539584849376567227195727866454634316160912681002825421465963362522393450893169172858402834235666933263545807995714783378950169683578174823488491909357427633035457784197524960389910540710489578759826363067920662779643375404559740917650243886760053701687916991447475484002431192216964738837995280252384708010243928511256575167772637388403254466789070713575214256192452449029110040537994627424532403698800565187212191087713740736381187190732113672955143767085965372942045440999035907543716561786569601702176758321532681645916740045002390737435026480991056245485874935448254792705897424944951812237223296933454686393069905231189956405670425313695771311131590273818080713469916045139064503982194263008992046624354925784856665539744927231738597774854129270160683415155174371151370503727502792785483327991937994001541664428014273100765370993607349522197479193975984616894205539735734827817805044102449000589381825695866538897122931680573846084525016332224646866617490832496084991690171583029352609836490908113464668343829985351590552945284372573978295485097950893072423518605982085487154470155025269025854044646496572448495225343096261896378931482883286657508859228868487844184479087538453974144187004884366561256723404772190847586008543961349071131191708943295337664384184532774661503245910257451923515607711559705478132556040197663414911885143697985464807309297002910250505302287769412337441199360424519160716552890882816796378296881641827981453035207233752063518782778493743827708109913493162932182427627261046280168269958077541122668104633712377856

4种进制表示形式

十进制:1010, 99, -217二进制,以0b或0B开头:0b010, -0B101八进制,以0o或0O开头:0o123, -0O456十六进制,以0x或0X开头:0x9a, -0X89

数字电路中的BODH(拨电话)体现的这四种形式,与这里不一样?

关于Python整数,就需要知道这些。

• 整数无限制 pow()

• 4种进制表示形式

3.1.2浮点数类型

与数学中实数的概念一致

带有小数点及小数的数字浮点数取值范围和小数精度都存在限制,但常规计算可忽略取值范围数量级约-10307至10308,精度数量级10-16

浮点数间运算存在不确定尾数,不是bug

浮点数间运算存在不确定尾数,不是bug

>>> 0.1+0.2 == 0.3False>>> round(0.1+0.2,1) == 0.3True>>>

round(x, d):对x四舍五入,d是小数截取位数浮点数间运算与比较用round()函数辅助不确定尾数一般发生在10-16左右,round()十分有效

浮点数可以采用科学计数法表示

使用字母e或E作为幂的符号,以10为基数,格式如下:

<a>e<b> 表示 a*10b例如:4.3e-3 值为0.00439.6E5 值为960000.0

关于Python浮点数,需要知道这些。

• 取值范围和精度基本无限制

• 运算存在不确定尾数 round()

• 科学计数法表示

3.1.3复数类型

与数学中复数的概念一致

Z.real获得实部,Z.imag获得虚部

3.1.4数值运算操作符

操作符是完成运算的一种符号体系

二元操作符有对应的增强赋值操作符

这个表格排版参考主要参考//10/01/markdowntable

数字类型的关系

类型间可进行混合运算,生成结果为"最宽"类型

三种类型存在一种逐渐"扩展"或"变宽"的关系:

整数 -> 浮点数 -> 复数例如:123 + 4.0 = 127.0 (整数+浮点数 = 浮点数)

3.1.5数值运算函数

一些以函数形式提供的数值运算功能

单元小结

数字类型及操作

整数类型的无限范围及4种进制表示浮点数类型的近似无限范围、小尾数及科学计数法+、-、*、/、//、%、

**、二元增强赋值操作符abs()、divmod()、pow()、round()、max()、min()int()、float()、complex()

3.2 实例3: 天天向上的力量

3.2.1 "天天向上的力量"问题分析

天天向上的力量

基本问题:持续的价值

一年365天,每天进步1%,累计进步多少呢?

1.01365一年365天,每天退步1%,累计剩下多少呢?

0.99365

需求分析

天天向上的力量

数学公式可以求解,似乎没必要用程序如果是"三天打鱼两天晒网"呢?如果是"双休日又不退步"呢?

3.2.2"天天向上的力量"第一问

天天向上的力量

问题1: 1‰的力量

一年365天,每天进步1‰,累计进步多少呢?

1.001365一年365天,每天退步1‰,累计剩下多少呢?

0.999365

#DayDayUpQ1.pydayup = pow(1.001, 365)daydown = pow(0.999, 365)print("向上:{:.2f},向下:{:.2f}".format(dayup, daydown))

运行结果:

向上:1.44,向下:0.69

1.001365 = 1.44 0.999365 = 0.69

1‰的力量,接近2倍,不可小觑哦

3.2.3"天天向上的力量"第二问

天天向上的力量

问题2: 5‰和1%的力量

一年365天,每天进步5‰或1%,累计进步多少呢?

1.0053651.01365一年365天,每天退步5‰或1%,累计剩下多少呢?

0.9953650.99365

#DayDayUpQ2.py#使用变量的好处:一处修改即可dayfactor = 0.005dayup = pow(1+dayfactor, 365)daydown = pow(1-dayfactor, 365)print("‰5向上:{:.2f},‰5向下:{:.2f}".format(dayup, daydown))dayfactor1 = 0.01dayup = pow(1+dayfactor1, 365)daydown = pow(1-dayfactor1, 365)print("%1向上:{:.2f},%1向下:{:.2f}".format(dayup, daydown))

运行结果:

‰5向上:6.17,‰5向下:0.16%1向上:37.78,%1向下:0.03

3.2.4"天天向上的力量"第三问

天天向上的力量

问题3: 工作日的力量

一年365天,一周5个工作日,每天进步1%一年365天,一周2个休息日,每天退步1%这种工作日的力量,如何呢?

1.01365 (数学思维) for…in… (计算思维)

#DayDayUpQ3.py#采用循环模拟365天的过程#抽象 + 自动化dayup = 1.0dayfactor = 0.01for i in range(365):if i % 7 in [6,0]:dayup = dayup*(1-dayfactor)else:dayup = dayup*(1+dayfactor)print("工作日的力量:{:.2f} ".format(dayup))

运行结果:

工作日的力量:4.63

1.001365 = 1.44 1.005365 = 6.171.01365 = 37.78

尽管工作日提高1%,但总体效果介于1‰和5‰的力量之间

3.2.5"天天向上的力量"第四问

天天向上的力量

问题4: 工作日的努力

工作日模式要努力到什么水平,才能与每天努力1%一样?A君: 一年365天,每天进步1%,不停歇B君: 一年365天,每周工作5天休息2天,休息日下降1%,要多努力呢?

for…in… (计算思维) def…while… ("笨办法"试错)

#DayDayUpQ4.py#根据df参数计算工作日力量的函数#参数不同,这段代码可共用#def保留字用于定义函数def dayUP(df):dayup = 1for i in range(365):if i % 7 in [6,0]:dayup = dayup*(1 - 0.01)else:dayup = dayup*(1 + df)return dayupdayfactor = 0.01#while保留字判断条件是否成立,条件成立时循环执行while dayUP(dayfactor) < 37.78:dayfactor += 0.001print("工作日的努力参数是:{:.3f} ".format(dayfactor))

运行结果:

工作日的努力参数是:0.019

1.01365 = 37.78 1.019365 = 962.89

工作日模式,每天要努力到1.9%,相当于365模式每天1%的效果!

3.2.6"天天向上的力量"举一反三

天天向上的力量

实例虽然仅包含8-12行代码,但包含很多语法元素条件循环、计数循环、分支、函数、计算思维清楚理解这些代码能够快速入门Python语言

问题的变化和扩展

工作日模式中,如果休息日不下降呢?如果努力每天提高1%,休息时每天下降1‰呢?如果工作3天休息1天呢?"三天打鱼,两天晒网"呢?"多一份努力"呢? (努力比下降多一点儿)"多一点懈怠"呢?(下降比努力多一点儿)

http://ncre./

3.3 字符串类型及操作

3.3.1 字符串类型的表示3.3.2 字符串操作符3.3.3 字符串处理函数3.3.4 字符串处理方法3.3.5 字符串类型的格式化

3.3.1 字符串类型的表示

字符串

由0个或多个字符组成的有序字符序列

字符串由一对单引号或一对双引号表示

"请输入带有符号的温度值: " 或者 ‘C’字符串是字符的有序序列,可以对其中的字符进行索引

“请” 是 "请输入带有符号的温度值: " 的第0个字符

字符串有 2类共4种 表示方法

由一对单引号或双引号表示,仅表示单行字符串

"请输入带有符号的温度值: " 或者 ‘C’由一对三单引号或三双引号表示,可表示多行字符串

#也经常被认为是多行注释''' Python语言 '''

Python语言为何提供 2类共4种 字符串表示方式?

如果希望在字符串中包含双引号或单引号呢?

‘这里有个双引号(")’ 或者 “这里有个单引号(’)” 如果希望在字符串中既包括单引号又包括双引号呢?

‘’’ 这里既有单引号(’)又有双引号 (") ‘’’

字符串的序号

字符串的使用

使用[ ]获取字符串中一个或多个字符

字符串切片高级用法

使用[M: N: K]根据步长对字符串切片

字符串的特殊字符

转义符 \

转义符表达特定字符的本意

“这里有个双引号(\”)" 结果为 这里有个双引号(")转义符形成一些组合,表达一些不可打印的含义

"\b"回退 "\n"换行(光标移动到下行首) “\r” 回车(光标移动到本行首)

3.3.2 字符串操作符

字符串操作符

由0个或多个字符组成的有序字符序列

获取星期字符串

输入:1-7的整数,表示星期几输出:输入整数对应的星期字符串例如:输入3,输出 星期三

#WeekNamePrintV1.pyweekStr ="星期一星期二星期三星期四星期五星期六星期日"weekId = eval(input("请输入星期数字(1-7):"))pos = (weekId - 1 ) * 3print(weekStr[pos: pos+3])

#WeekNamePrintV2.pyweekStr = "一二三四五六日"weekId = eval(input("请输入星期数字(1-7):"))print("星期" + weekStr[weekId-1])

3.3.3 字符串处理函数

一些以函数形式提供的字符串处理功能

Unicode编码

Python字符串的编码方式

统一字符编码,即覆盖几乎所有字符的编码方式从0到1114111 (0x10FFFF)空间,每个编码对应一个字符Python字符串中每个字符都是Unicode编码字符

一些有趣的例子

3.3.4 字符串处理方法

"方法"在编程中是一个专有名词

"方法"特指<a>.<b>()风格中的函数<b>()方法本身也是函数,但与<a>有关,<a>.<b>()风格使用字符串或字符串变量是<a>,存在一些可用方法

一些以方法形式提供的字符串处理功能

3.3.5 字符串类型的格式化

字符串类型的格式化

格式化是对字符串进行格式表达的方式

字符串格式化使用.format()方法,用法如下:

<模板字符串>.format(<逗号分隔的参数>)

format()方法的格式控制

>>>"{0:=^20}".format("PYTHON")'=======PYTHON======='>>>"{0:*>20}".format("BIT")'*****************BIT'>>>"{:10}".format("BIT")'BIT '>>>"{0:,.2f}".format(12345.6789)'12,345.68'>>>"{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425)'110101001,Ʃ,425,651,1a9,1A9'>>>"{0:e},{0:E},{0:f},{0:%}".format(3.14)'3.140000e+00,3.140000E+00,3.140000,314.000000%'

单元小结

字符串类型及操作

正向递增序号、反向递减序号、<字符串>[M:N:K]+、*、in、len()、str()、hex()、oct()、ord()、chr().lower()、.upper()、.split()、.count()、.replace().center()、.strip()、.join()、.format()格式化

3.4 模块2: time库的使用

3.4.1 time库基本介绍

time库概述

time库是Python中处理时间的标准库

计算机时间的表达提供获取系统时间并格式化输出功能提供系统级精确计时功能,用于程序性能分析

import timetime.<b>()

time库包括三类函数

时间获取:time() ctime() gmtime()时间格式化:strftime() strptime()程序计时:sleep(), perf_counter()

3.4.2时间获取

#获取当前时间戳,即计算机内部时间值,浮点数>>>time.time()1516939876.6022282#获取当前时间并以易读方式表示,返回字符串>>>time.ctime()'Fri Jan 26 12:11:16 '#获取当前时间,表示为计算机可处理的时间格式>>>time.gmtime()time.struct_time(tm_year=, tm_mon=1, tm_mday=26, tm_hour=4, tm_min=11, tm_sec=16, tm_wday=4, tm_yday=26, tm_isdst=0)

3.4.3 时间格式化

时间格式化

将时间以合理的方式展示出来

格式化:类似字符串格式化,需要有展示模板展示模板由特定的格式化控制符组成strftime()方法

>>>t = time.gmtime()>>>time.strftime("%Y-%m-%d %H:%M:%S",t)'-01-26 12:55:20'>>>timeStr = '-01-26 12:55:20'>>>time.strptime(timeStr, "%Y-%m-%d %H:%M:%S")time.struct_time(tm_year=,tm_mon=1,tm_mday=26, tm_hour=4, tm_min=11,tm_sec=16,tm_wday=4, tm_yday=26, tm_isdst=0)

格式化控制符

3.4.4 程序计时应用

程序计时

程序计时应用广泛

程序计时指测量起止动作所经历时间的过程测量时间:perf_counter()产生时间:sleep()

>>>start = time.perf_counter()318.66599499718114>>>end = time.perf_counter() 341.3905185375658>>>end - start22.724523540384666>>>def wait():time.sleep(3.3)>>>wait() #程序将等待3.3秒后再退出

如何使用Python官方文档?

/zh-cn/3/

3.7.3版本开始,Python官方文档有了中文版,快去看看吧,能看英文版更好鉴于官方文档并非教程,而是技术手册,可以阅读但请注意:

• 不建议初学者阅读,技术手册中包含较多背景知识,阅读要求较高

• 不建议作为教程学习,官方文档未考虑认知规律,缺少实例,跟学进展会比较慢

• 建议作为某些疑惑内容深入理解和查阅的工具手册,与字典用法相似

3.5 实例4: 文本进度条

3.5.1 "文本进度条"问题分析

进度条什么原理呢?

需求分析

文本进度条

采用字符串方式打印可以动态变化的文本进度条进度条需要能在一行中逐渐变化

问题分析

如何获得文本进度条的变化时间?

采用sleep()模拟一个持续的进度似乎不那么难

3.5.2 "文本进度条"简单的开始

#TextProBarV1.py 简单的开始import timescale = 10print("------执行开始------")for i in range(scale+1):a = '*' * ib = '.' * (scale - i)c = (i/scale)*100print("{:^3.0f}%[{}->{}]".format(c,a,b))time.sleep(0.1)print("------执行结束------")

运行结果:

------执行开始------0 %[->..........]10 %[*->.........]20 %[**->........]30 %[***->.......]40 %[****->......]50 %[*****->.....]60 %[******->....]70 %[*******->...]80 %[********->..]90 %[*********->.]100%[**********->]------执行结束------

3.5.3 "文本进度条"单行动态刷新

单行动态刷新

刷新的关键是 \r

刷新的本质是:用之后打印的字符覆盖之前的字符不能换行:print()需要被控制要能回退:打印后光标退回到之前的位置 \r

#TextProBarV2.pyimport timefor i in range(101):print("\r{:3}%".format(i), end="")time.sleep(0.1)

IDLE屏蔽了\r功能

命令行执行(pycharm可以执行)

3.5.4 "文本进度条"实例完整效果

#TextProBarV3.pyimport timescale = 50print("执行开始".center(scale//2, "-"))start = time.perf_counter()for i in range(scale+1):a = '*' * ib = '.' * (scale - i)c = (i/scale)*100dur = time.perf_counter() - startprint("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')time.sleep(0.1)print("\n"+"执行结束".center(scale//2,'-'))

运行结果:

3.5.5 "文本进度条"举一反三

举一反三

计算问题扩展

文本进度条程序使用了perf_counter()计时计时方法适合各类需要统计时间的计算问题例如:比较不同算法时间、统计程序运行时间

进度条应用

在任何运行时间需要较长的程序中增加进度条在任何希望提高用户体验的应用中增加进度条进度条是人机交互的纽带之一

文本进度条的不同设计函数

第4章 程序的控制结构

4.1 程序的分支结构4.2 实例5: 身体质量指数BMI4.3 程序的循环结构4.4 模块3: random库的使用4.5 实例6: 圆周率的计算

方法论

Python程序的控制语法及结构

实践能力

学会编写带有条件判断及循环的程序

4.1 程序的分支结构

4.1.1单分支结构4.1.2二分支结构4.1.3多分支结构4.1.4条件判断及组合4.1.5程序的异常处理

4.1.1单分支结构

根据判断条件结果而选择不同向前路径的运行方式

单分支示例

4.1.2二分支结构

根据判断条件结果而选择不同向前路径的运行方式

二分支示例

紧凑形式:适用于简单表达式的二分支结构

4.1.3多分支结构

对不同分数分级的问题

4.1.4条件判断及组合

条件判断

操作符

用于条件组合的三个保留字

示例

4.1.5程序的异常处理

异常处理的基本使用

原来这个结构叫做异常处理,即便自己在爬取时经常使用这个结构,也不知道这叫异常处理。看来基础真的要牢固!

#异常处理#示例1try :num = eval(input("请输入一个整数: "))print(num**2)except :print("输入不是整数")

#异常处理#示例2try :num = eval(input("请输入一个整数: "))print(num**2)#标注异常类型后,仅响应此类异常,异常类型名字等同于变量名except NameError:print("输入不是整数")

突然想起Verilog语言中的default就是防止生成锁存器

单元小结

单分支 if 二分支 if-else 及紧凑形式多分支 if-elif-else 及条件之间关系not and or > >= == <= < !=异常处理 try-except-else-finally

4.2 实例5: 身体质量指数BMI

4.2.1 "身体质量指数BMI"问题分析

身体质量指数BMI

BMI:对身体质量的刻画

BMI:Body Mass Index

国际上常用的衡量人体肥胖和健康程度的重要标准,主要用于统计分析定义 : BMI = 体重 (kg) / 身高2 (m2)

BMI:对身体质量的刻画

实例:体重 72 kg 身高 1.75 m

BMI 值是 23.5这个值是否健康呢?

国际:世界卫生组织 国内:国家卫生健康委员会

问题需求

输入:给定体重和身高值输出:BMI指标分类信息(国际和国内)

4.2.2"身体质量指数BMI"实例讲解

身体质量指标BMI

思路方法

难点在于同时输出国际和国内对应的分类思路1:分别计算并给出国际和国内BMI分类思路2:混合计算并给出国际和国内BMI分类

#CalBMIv1.pyheight, weight = eval(input("请输入身高(米)和体重(公斤)[逗号隔开]: "))bmi = weight / pow(height, 2)print("BMI 数值为:{:.2f}".format(bmi))who = ""if bmi < 18.5:who = "偏瘦"elif 18.5 <= bmi < 25:who = "正常"elif 25 <= bmi < 30:who = "偏胖"else:who = "肥胖"print("BMI 指标为:国际'{0}'".format(who))

#CalBMIv2.pyheight, weight = eval(input("请输入身高(米)和体重(公斤)[逗号隔开]: "))bmi = weight / pow(height, 2)print("BMI 数值为:{:.2f}".format(bmi))nat = ""if bmi < 18.5:nat = "偏瘦"elif 18.5 <= bmi < 24:nat = "正常"elif 24 <= bmi < 28:nat = "偏胖"else:nat = "肥胖"print("BMI 指标为:国内'{0}'".format(nat))

#CalBMIv3.pyheight, weight = eval(input("请输入身高(米)和体重(公斤)[逗号隔开]: "))bmi = weight / pow(height, 2)print("BMI 数值为:{:.2f}".format(bmi))who, nat = "", ""if bmi < 18.5:who, nat = "偏瘦", "偏瘦"elif 18.5 <= bmi < 24:who, nat = "正常", "正常"elif 24 <= bmi < 25:who, nat = "正常", "偏胖"elif 25 <= bmi < 28:who, nat = "偏胖", "偏胖"elif 28 <= bmi < 30:who, nat = "偏胖", "肥胖"else:who, nat = "肥胖", "肥胖"print("BMI 指标为:国际'{0}', 国内'{1}'".format(who, nat))

4.2.3"身体质量指数BMI"举一反三

关注多分支条件的组合

多分支条件之间的覆盖是重要问题程序可运行,但如果不正确,要注意多分支分支结构是程序的重要框架,读程序先看分支

4.3 程序的循环结构

4.3.1 遍历循环4.3.2 无限循环4.3.3 循环控制保留字4.3.4 循环的高级用法

4.3.1 遍历循环

遍历某个结构形成的循环运行方式

从遍历结构中逐一提取元素,放在循环变量中由保留字for和in组成,完整遍历所有元素后结束每次循环,所获得元素放入循环变量,并执行一次语句块

遍历循环的应用

计数循环(N次)

遍历由range()函数产生的数字序列,产生循环

计数循环(特定次)

遍历由range()函数产生的数字序列,产生循环

字符串遍历循环

s是字符串,遍历字符串每个字符,产生循环

>>> for c in "Python123":print(c,end=",")P,y,t,h,o,n,1,2,3,

列表遍历循环

ls是一个列表,遍历其每个元素,产生循环

>>> for item in [123, "PY", 456]:print(item, end=",")123,PY,456,>>>

文件遍历循环

fi是一个文件标识符,遍历其每行,产生循环

4.3.2 无限循环

由条件控制的循环运行方式

反复执行语句块,直到条件不满足时结束

无限循环的条件

4.3.3 循环控制保留字

break 和 continue

break跳出并结束当前整个循环,执行循环后的语句continue结束当次循环,继续执行后续次数循环break和continue可以与for和while循环搭配使用

break仅跳出当前最内层循环

4.3.4 循环的高级用法

循环的扩展

循环与else

当循环没有被break语句退出时,执行else语句块else语句块作为"正常"完成循环的奖励这里else的用法与异常处理中else用法相似

单元小结

for…in 遍历循环: 计数、字符串、列表、文件…while无限循环continue和break保留字: 退出当前循环层次循环else的高级用法: 与break有关

4.4 模块3: random库的使用

4.4.1 random库基本介绍

random库概述

random库是使用随机数的Python标准库

伪随机数: 采用梅森旋转算法生成的(伪)随机序列中元素random库主要用于生成随机数使用random库: import random

random库包括两类函数,常用共8个

基本随机数函数: seed(), random()扩展随机数函数: randint(), getrandbits(), uniform(), randrange(), choice(), shuffle()

4.4.2 基本随机数函数

#产生种子10对应的序列>>>random.seed(10) #生成一个[0.0, 1.0)之间的随机小数>>>random.random()0.5714025946899135

4.4.3 扩展随机数函数

>>> import random#生成一个[10, 100]之间的整数>>> random.randint(10, 100)79#生成一个[10, 100]之间以10为步长的随机整数>>> random.randrange(10,100,10)60#生成一个16比特长的随机整数>>> random.getrandbits(16)33805#生成一个[10, 100]之间的随机小数>>> random.uniform(10, 100)15.710497268060426#从序列seq中随机选择一个元素>>> random.choice([1,2,3,4,5,6,7,8,9])1#将序列seq中元素随机排列,返回打乱后的序列>>> s=[1,2,3,4,5,6,7,8,9];random.shuffle(s);print(s)[9, 5, 2, 7, 3, 1, 6, 8, 4]

随机数函数的使用

需要掌握的能力

能够利用随机数种子产生"确定"伪随机数能够产生随机整数能够对序列类型进行随机操作

4.5 实例6: 圆周率的计算

4.5.1"圆周率的计算"问题分析

圆周率的近似计算公式

4.5.2 "圆周率的计算"实例讲解

圆周率的近似计算公式

#CalPiV1.pypi = 0N = 100for k in range(N) :pi += 1/pow(16,k)*( \4/(8*k+1) - 2/(8*k+4) - \1/(8*k+5) - 1/(8*k+6))print("圆周率值是: {}".format(pi))

运行结果:

圆周率值是: 3.141592653589793

#CalPiV2.pyfrom random import randomfrom time import perf_counterDARTS = 1000*1000hits = 0.0start = perf_counter()for i in range(1, DARTS+1):x, y = random(), random()dist = pow(x ** 2 + y ** 2, 0.5)if dist <= 1.0:hits = hits + 1pi = 4 * (hits/DARTS)print("圆周率值是: {}".format(pi))print("运行时间是: {:.5f}s".format(perf_counter()-start))

运行结果:

圆周率值是: 3.138692运行时间是: 0.84175s

4.5.3"圆周率的计算"举一反三

理解方法思维

数学思维:找到公式,利用公式求解计算思维:抽象一种过程,用计算机自动化求解谁更准确? (不好说…)

程序运行时间分析

使用time库的计时方法获得程序运行时间改变撒点数量,理解程序运行时间的分布初步掌握简单的程序性能分析方法

计算问题的扩展

不求解圆周率,而是某个特定图形的面积在工程计算中寻找蒙特卡罗方法的应用场景

第5章 函数和代码复用

5.1 函数的定义与使用5.2 实例7: 七段数码管绘制5.3 代码复用与函数递归5.4 模块4: PyInstaller库的使用5.5 实例8: 科赫雪花小包裹

方法论

Python基本代码抽象即函数的使用方法

实践能力

学会编写带有函数并复用代码的程序

5.1 函数的定义与使用

5.1.1 函数的理解与定义5.1.2 函数的使用及调用过程5.1.3 函数的参数传递5.1.4 函数的返回值5.1.5 局部变量和全局变量5.1.6 lambda函数

5.1.1 函数的理解与定义

函数的定义

函数是一段代码的表示

函数是一段具有特定功能的、可重用的语句组函数是一种功能的抽象,一般函数表达特定功能两个作用:降低编程难度 和 代码复用

y = f(x)

函数定义时,所指定的参数是一种占位符函数定义后,如果不经过调用,不会被执行函数定义时,参数是输入、函数体是处理、结果是输出 (IPO)

5.1.2 函数的使用及调用过程

函数的调用

调用是运行函数代码的方式

5.1.3 函数的参数传递

参数个数

函数可以有参数,也可以没有,但必须保留括号

可选参数传递

函数定义时可以为某些参数指定默认值,构成可选参数

函数定义时可以设计可变数量参数,既不确定参数总数量

参数传递的两种方式

参数传递的两种方式

5.1.4 函数的返回值

函数可以返回0个或多个结果

return保留字用来传递返回值函数可以有返回值,也可以没有,可以有return,也可以没有return可以传递0个返回值,也可以传递任意多个返回值

函数调用时,参数可以按照位置或名称方式传递

5.1.5 局部变量和全局变量

规则1: 局部变量和全局变量是不同变量

局部变量是函数内部的占位符,与全局变量可能重名但不同函数运算结束后,局部变量被释放可以使用global保留字在函数内部使用全局变量

规则2: 局部变量为组合数据类型且未创建,等同于全局变量

使用规则

基本数据类型,无论是否重名,局部变量与全局变量不同可以通过global保留字在函数内部声明全局变量组合数据类型,如果局部变量未真实创建,则是全局变量

5.1.6 lambda函数

lambda函数返回函数名作为结果

lambda函数是一种匿名函数,即没有名字的函数使用lambda保留字定义,函数名是返回结果lambda函数用于定义简单的、能够在一行内表示的函数

>>> f = lambda x,y:x+y>>> f(10,15)25>>> f = lambda : "lambda函数">>> print(f())lambda函数>>>

lambda函数的应用

谨慎使用lambda函数

lambda函数主要用作一些特定函数或方法的参数lambda函数有一些固定使用方式,建议逐步掌握一般情况,建议使用def定义的普通函数

单元小结

使用保留字def定义函数,lambda定义匿名函数可选参数(赋初值)、可变参数(*b)、名称传递保留字return可以返回任意多个结果保留字global声明使用全局变量,一些隐式规则

5.2 实例7: 七段数码管绘制

5.2.1 "七段数码管绘制"问题分析

问题分析

七段数码管绘制

需求:用程序绘制七段数码管,似乎很有趣该怎么做呢?

turtle绘图体系 -> 七段数码管绘制

七段数码管绘制时间

5.2.2 "七段数码管绘制"实例讲解

七段数码管绘制

基本思路

步骤1:绘制单个数字对应的数码管步骤2:获得一串数字,绘制对应的数码管步骤3:获得当前系统时间,绘制对应的数码管

步骤1: 绘制单个数码管

import turtledef drawLine(draw): #绘制单段数码管turtle.pendown() if draw else turtle.penup()turtle.fd(40)turtle.right(90)def drawDigit(digit): #根据数字绘制七段数码管drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,2,6,8] else drawLine(False)turtle.left(90)drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)turtle.left(180)turtle.penup() #为绘制后续数字确定位置turtle.fd(20) #为绘制后续数字确定位置

步骤2: 获取一段数字,绘制多个数码管

import turtledef drawLine(draw): #绘制单段数码管turtle.pendown() if draw else turtle.penup()turtle.fd(40)turtle.right(90)def drawDigit(digit): #根据数字绘制七段数码管drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,2,6,8] else drawLine(False)turtle.left(90)drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)turtle.left(180)turtle.penup() #为绘制后续数字确定位置turtle.fd(20) #为绘制后续数字确定位置def drawDate(date): #获得要输出的数字for i in date:drawDigit(eval(i)) #通过eval()函数将数字变为整数def main():turtle.setup(800, 350, 200, 200)turtle.penup()turtle.fd(-300)turtle.pensize(5)drawDate('1010')turtle.hideturtle()turtle.done()main()

运行结果:

绘制漂亮的七段数码管

步骤3: 获取系统时间,绘制七段数码管

import turtle,timedef drawGap(): #绘制数码管间隔turtle.penup()turtle.fd(5)def drawLine(draw): #绘制单段数码管drawGap()turtle.pendown() if draw else turtle.penup()turtle.fd(40)drawGap()turtle.right(90)def drawDigit(digit): #根据数字绘制七段数码管drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,2,6,8] else drawLine(False)turtle.left(90)drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)turtle.left(180)turtle.penup() #为绘制后续数字确定位置turtle.fd(20) #为绘制后续数字确定位置def drawDate(date): #获得要输出的数字,#data为日期,格式为 '%Y-%m=%d+'turtle.pencolor("red")for i in date:if i == '-':turtle.write('年', font=("Arial", 18, "normal"))turtle.pencolor("green")turtle.fd(40)elif i == '=':turtle.write('月', font=("Arial", 18, "normal"))turtle.pencolor("blue")turtle.fd(40)elif i == '+':turtle.write('日', font=("Arial", 18, "normal"))else:drawDigit(eval(i))def main():turtle.setup(800, 350, 200, 200)turtle.penup()turtle.fd(-300)turtle.pensize(5)drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))turtle.hideturtle()turtle.done()main()

运行结果:

5.2.3 "七段数码管绘制"举一反三

理解方法思维

模块化思维:确定模块接口,封装功能规则化思维:抽象过程为规则,计算机自动执行化繁为简:将大功能变为小功能组合,分而治之

应用问题的扩展

绘制带小数点的七段数码管带刷新的时间倒计时效果绘制高级的数码管

更多作品请参考:https://python123.io/index/turtle_drawing

5.3 代码复用与函数递归

5.3.1 代码复用与模块化设计5.3.2 函数递归的理解5.3.3 函数递归的调用过程5.3.4 函数递归实例解析

5.3.1 代码复用与模块化设计

代码复用

把代码当成资源进行抽象

代码资源化:程序代码是一种用来表达计算的"资源"代码抽象化:使用函数等方法对代码赋予更高级别的定义代码复用:同一份代码在需要时可以被重复使用

模块化设计

分而治之

通过函数或对象封装将程序划分为模块及模块间的表达具体包括:主程序、子程序和子程序间关系分而治之:一种分而治之、分层抽象、体系化的设计思想

紧耦合 松耦合

紧耦合:两个部分之间交流很多,无法独立存在松耦合:两个部分之间交流较少,可以独立存在模块内部紧耦合、模块之间松耦合

5.3.2 函数递归的理解

递归的定义

函数定义中调用函数自身的方式

两个关键特征

链条:计算过程存在递归链条基例:存在一个或多个不需要再次递归的基例

类似数学归纳法

数学归纳法

– 证明当n取第一个值n0时命题成立

– 假设当nk时命题成立,证明当n=nk+1时命题也成立递归是数学归纳法思维的编程体现

5.3.3 函数递归的调用过程

递归的实现

函数 + 分支语句

递归本身是一个函数,需要函数定义方式描述函数内部,采用分支语句对输入参数进行判断基例和链条,分别编写对应代码

5.3.4 函数递归实例解析

字符串反转

将字符串s反转后输出

斐波那契数列

一个经典数列

汉诺塔

函数 + 分支结构递归链条递归基例

count = 0def hanoi(n, src, dst, mid):global countif n == 1 :print("{}:{}->{}".format(1,src,dst))count += 1else :hanoi(n-1, src, mid, dst)print("{}:{}->{}".format(n,src,dst))count += 1hanoi(n-1, mid, dst, src)hanoi(3, "A", "C", "B")print(count)

运行结果:

1:A->C2:A->B1:C->B3:A->C1:B->A2:B->C1:A->C7

单元小结

模块化设计:松耦合、紧耦合函数递归的2个特征:基例和链条函数递归的实现:函数 + 分支结构

5.4 模块4: PyInstaller库的使用

5.4.1 PyInstaller库基本介绍

将.py源代码转换成无需源代码的可执行文件,竟然忘记了这个,哈哈!

PyInstaller库是第三方库

官方网站:第三方库:使用前需要额外安装安装第三方库需要使用pip工具

PyInstaller库地安装

(cmd命令行) pip install pyinstaller

PyInstaller库使用说明

(cmd命令行) pyinstaller -F <文件名.py>

PyInstaller库常用参数

使用举例

pyinstaller –i curve.ico –F SevenDigitsDrawV2.py

5.5 实例8: 科赫雪花小包裹

5.5.1 "科赫雪花小包裹"问题分析

科赫雪花

高大上的分形几何

分形几何是一种迭代的几何图形,广泛存在于自然界中

科赫曲线,也叫雪花曲线

科赫雪花绘制

用Python绘制科赫曲线

5.5.2 "科赫雪花小包裹"实例讲解

科赫雪花小包裹

科赫曲线的绘制

递归思想:函数+分支递归链条:线段的组合递归基例:初始线段

#KochDrawV1.py 科赫曲线的绘制import turtledef koch(size, n):if n == 0:turtle.fd(size)else:for angle in [0, 60, -120, 60]:turtle.left(angle)koch(size/3, n-1)def main():turtle.setup(800,400)turtle.penup()turtle.goto(-300, -50)turtle.pendown()turtle.pensize(2)koch(600, 3) # 3阶科赫曲线,阶数turtle.hideturtle()main()

运行结果:

#KochDrawV2.py 科赫雪花的绘制import turtledef koch(size, n):if n == 0:turtle.fd(size)else:for angle in [0, 60, -120, 60]:turtle.left(angle)koch(size/3, n-1)def main():turtle.setup(600, 600)turtle.penup()turtle.goto(-200, 100)turtle.pendown()turtle.pensize(2)level = 3 # 3阶科赫雪花,阶数koch(400, level)turtle.right(120)koch(400, level)turtle.right(120)koch(400, level)turtle.hideturtle()main()

运行结果:

打包才能上路…

pyinstaller –i curve.ico –F KochDrawV2.py

对编写后的科赫雪花代码进行打包处理

5.5.3"科赫雪花小包裹"举一反三

绘制条件的扩展

修改分形几何绘制阶数修改科赫曲线的基本定义及旋转角度修改绘制科赫雪花的基础框架图形

分形几何千千万

康托尔集、谢尔宾斯基三角形、门格海绵…龙形曲线、空间填充曲线、科赫曲线…函数递归的深入应用…

第6章 组合数据类型

6.1 集合类型及操作6.2 序列类型及操作6.3 实例9: 基本统计值计算6.4 字典类型及操作6.5 模块5: jieba库的使用6.6 实例10: 文本词频统计

方法论

Python三种主流组合数据类型的使用方法

实践能力

学会编写处理一组数据的程序

6.1 集合类型及操作

6.1.1 集合类型定义6.1.2 集合操作符6.1.3 集合处理方法6.1.4 集合类型应用场景

6.1.1 集合类型定义

集合是多个元素的无序组合

集合类型与数学中的集合概念一致集合元素之间无序,每个元素唯一,不存在相同元素集合元素不可更改,不能是可变数据类型(为什么?)

集合是多个元素的无序组合

集合用大括号 {} 表示,元素间用逗号分隔建立集合类型用 {} 或 set()建立空集合类型,必须使用set()

#使用{}建立集合>>> A = {"python", 123, ("python",123)}>>> print(A){('python', 123), 123, 'python'}#使用set()建立集合>>> B=set("python")>>> print(B){'n', 't', 'y', 'p', 'o', 'h'}>>> c= {"python", 123, "python",123}>>> print(c){123, 'python'}

6.1.2 集合操作符

集合间操作

集合操作符

6个操作符

4个增强操作符

>>> A = {"p","y",123}>>> B = set("pypy123")#差>>> A-B{123}>>> B-A{'3', '1', '2'}#交>>> A&B{'y', 'p'}#并>>> A|B{'3', '1', 'y', 123, 'p', '2'}#补>>> A^B{'3', 123, '1', '2'}

6.1.3 集合处理方法

>>> A = {"p","y",123}>>> for item in A:print(item,end="")y123p>>> A{'y', 123, 'p'}>>> try:while True:print(A.pop(),end="")except:passy123p>>> Aset()

6.1.4 集合类型应用场景

包含关系比较

>>> "p" in {"p","y",123}True>>> {"p","y"} >= {"p","y",123}False>>>

数据去重:集合类型所有元素无重复

>>> ls = ["p","p","y","y",123]# 利用了集合无重复元素的特点>>> s = set(ls)>>> print(s){'y', 123, 'p'}# 还可以将集合转换为列表>>> lt = list(s)>>> print(lt)['y', 123, 'p']

单元小结

集合使用{}和set()函数创建集合间操作:交(&)、并(|)、差(-)、补(^)、比较(>=<)集合类型方法:.add()、.discard()、.pop()等集合类型主要应用于:包含关系比较、数据去重

6.2 序列类型及操作

序列类型定义序列处理函数及方法元组类型及操作列表类型及操作序列类型应用场景

6.2.1 序列类型定义

序列是具有先后关系的一组元素

序列是一维元素向量,元素类型可以不同类似数学元素序列: s0, s1, … , sn-1元素间由序号引导,通过下标访问序列的特定元素

序列是一个基类类型

序号的定义

6.2.2 序列处理函数及方法

序列类型通用操作符

6个操作符

>>> ls = ["python",123,".io"]>>> ls[::-1]['.io', 123, 'python']>>> s = "python123.io">>> s[::-1]'oi.321nohtyp'

序列类型通用函数和方法

绘制条件的扩展

>>> ls = ["python",123,".io"]>>> len(ls)3>>> s = "python123.io">>> max(s)'y'

6.2.3 元组类型及操作

元组类型定义

元组是序列类型的一种扩展

元组是一种序列类型,一旦创建就不能被修改使用小括号 () 或 tuple() 创建,元素间用逗号 , 分隔可以使用或不使用小括号

>>> creature = "cat","dog","tiger","human">>> creature('cat', 'dog', 'tiger', 'human')>>> color = (0x001100,"blue",creature)>>> color(4352, 'blue', ('cat', 'dog', 'tiger', 'human'))>>>

元组继承序列类型的全部通用操作

元组继承了序列类型的全部通用操作元组因为创建后不能修改,因此没有特殊操作使用或不使用小括号

>>> creature = "cat","dog","tiger","human">>> creature('cat', 'dog', 'tiger', 'human')>>> color = (0x001100,"blue",creature)>>> color(4352, 'blue', ('cat', 'dog', 'tiger', 'human'))>>> color[-1][-2]'tiger'>>>

6.2.4 列表类型及操作

列表类型定义

列表是序列类型的一种扩展,十分常用

列表是一种序列类型,创建后可以随意被修改使用方括号 [] 或list() 创建,元素间用逗号 , 分隔列表中各元素类型可以不同,无长度限制

>>> ls = ["cat", "dog", "tiger", 1024]>>> ls['cat', 'dog', 'tiger', 1024]>>> lt = ls>>> lt['cat', 'dog', 'tiger', 1024]>>>

方括号 [] 真正创建一个列表,赋值仅传递引用

列表类型操作函数和方法

>>> ls = ["cat", "dog", "tiger", 1024]>>> ls[1:2]=[1,2,3,4]>>> ls['cat', 1, 2, 3, 4, 'tiger', 1024]>>> del ls[::3]>>> ls[1, 2, 4, 'tiger']>>> ls*2[1, 2, 4, 'tiger', 1, 2, 4, 'tiger']>>> ls = ["cat", "dog", "tiger", 1024]>>> ls.append(1234)>>> ls['cat', 'dog', 'tiger', 1024, 1234]>>> ls.insert(3,"human")>>> ls['cat', 'dog', 'tiger', 'human', 1024, 1234]>>> ls.reverse()>>> ls[1234, 1024, 'human', 'tiger', 'dog', 'cat']>>>

列表功能默认

 定义空列表lt

 向lt新增5个元素

 修改lt中第2个元素

 向lt中第2个位置增加一个元素

 从lt中第1个位置删除一个元素

 删除lt中第1-3位置元素

 判断lt中是否包含数字0

 向lt新增数字0

 返回数字0所在lt中的索引

 lt的长度

 lt中最大元素

 清空lt

6.2.5 序列类型应用场景

数据表示:元组 和 列表

元组用于元素不改变的应用场景,更多用于固定搭配场景列表更加灵活,它是最常用的序列类型最主要作用:表示一组有序数据,进而操作它们

元素遍历

for item in ls : <语句块>

for item in tp : <语句块>

数据保护

如果不希望数据被程序所改变,转换成元组类型

>>> ls = ["cat", "dog", "tiger", 1024]>>> lt = tuple(ls)>>> lt('cat', 'dog', 'tiger', 1024)

单元小结

序列类型及操作

序列是基类类型,扩展类型包括:字符串、元组和列表元组用()和tuple()创建,列表用[]和set()创建元组操作与序列操作基本相同列表操作在序列操作基础上,增加了更多的灵活性

6.3 实例9: 基本统计值计算

6.3.1"基本统计值计算"问题分析

问题分析

基本统计值

需求:给出一组数,对它们有个概要理解该怎么做呢?

总个数、求和、平均值、方差、中位数… 总个数:len()求和:for … in平均值:求和/总个数方差:

各数据与平均数差的平方和的平均数中位数:排序,然后…

奇数找中间1个,偶数找中间2个取平均

6.3.2 "基本统计值计算"实例讲解

基本统计值计算

获取多数据输入通过函数分隔功能

#CalStatisticsV1.py 基本统计值计算#获取用户不定长度的输入def getNum():nums = []iNumStr = input("请输入数字(回车退出): ")while iNumStr != "":nums.append(eval(iNumStr))iNumStr = input("请输入数字(回车退出): ")return nums#计算平均值def mean(numbers): s = 0.0for num in numbers:s = s + numreturn s / len(numbers)#计算方差def dev(numbers, mean): sdev = 0.0for num in numbers:sdev = sdev + (num - mean)**2return pow(sdev / (len(numbers)-1), 0.5)#计算中位数def median(numbers): sorted(numbers)size = len(numbers)if size % 2 == 0:med = (numbers[size//2-1] + numbers[size//2])/2else:med = numbers[size//2]return medn = getNum()m = mean(n)print("平均值:{},方差:{:.2},中位数:{}.".format(m, dev(n,m),median(n)))

6.3.3 "基本统计值计算"举一反三

技术能力扩展

获取多个数据:从控制台获取多个不确定数据的方法分隔多个函数:模块化设计方法充分利用函数:充分利用Python提供的内置函数

6.4 字典类型及操作

6.4.1字典类型定义6.4.2字典处理函数及方法6.4.3字典类型应用场景

6.4.1字典类型定义

理解“映射”

映射是一种键(索引)和值(数据)的对应

字典类型是“映射”的体现

键值对:键是数据索引的扩展字典是键值对的集合,键值对之间无序采用大括号{}和dict()创建,键值对用冒号: 表示

{<键1>:<值1>, <键2>:<值2>, … , <键n>:<值n>}

在字典变量中,通过键获得值

[ ] 用来向字典变量中索引或增加元素

>>> d = {"中国":"北京", "美国":"华盛顿", "法国":"巴黎"}>>> d{'中国': '北京', '美国': '华盛顿', '法国': '巴黎'}>>> d["中国"]'北京'>>> de={};type(de)<class 'dict'>>>>

6.4.2字典处理函数及方法

字典类型操作函数和方法

>>> d = {"中国":"北京", "美国":"华盛顿", "法国":"巴黎"}>>> "中国" in dTrue>>> d.keys()dict_keys(['中国', '美国', '法国'])>>> d.values()dict_values(['北京', '华盛顿', '巴黎'])>>>

字典功能默写

 定义空字典d

 向d新增2个键值对元素

 修改第2个元素

 判断字符"c"是否是d的键

 计算d的长度

 清空d

6.4.3字典类型应用场景

映射的表达

映射无处不在,键值对无处不在例如:统计数据出现的次数,数据是键,次数是值最主要作用:表达键值对数据,进而操作它们

元素遍历

for k in d : <语句块>

单元小结

字典类型及操作

映射关系采用键值对表达字典类型使用{}和dict()创建,键值对之间用:分隔d[key] 方式既可以索引,也可以赋值字典类型有一批操作方法和函数,最重要的是.get()

6.5 模块5: jieba库的使用

6.5.1 jieba库基本介绍

jieba库概述

jieba是优秀的中文分词第三方库

中文文本需要通过分词获得单个的词语jieba是优秀的中文分词第三方库,需要额外安装jieba库提供三种分词模式,最简单只需掌握一个函数

jieba库的安装

(cmd命令行) pip install jieba

jieba分词的原理

jieba分词依靠中文词库

利用一个中文词库,确定中文字符之间的关联概率中文字符间概率大的组成词组,形成分词结果除了分词,用户还可以添加自定义的词组

6.5.2 jieba库使用说明

jieba分词的三种模式

精确模式、全模式、搜索引擎模式

精确模式:把文本精确的切分开,不存在冗余单词全模式:把文本中所有可能的词语都扫描出来,有冗余搜索引擎模式:在精确模式基础上,对长词再次切分

jieba库常用函数

>>> import jieba#精确模式,返回一个列表类型的分词结果>>> jieba.lcut("中国是一个伟大的国家")Building prefix dict from the default dictionary ...Dumping model to file cache C:\Users\···\Temp\jieba.cacheLoading model cost 0.787 seconds.Prefix dict has been built successfully.['中国', '是', '一个', '伟大', '的', '国家']#全模式,返回一个列表类型的分词结果,存在冗余>>> jieba.lcut("中国是一个伟大的国家",cut_all=True)['中国', '国是', '一个', '伟大', '的', '国家']#搜索引擎模式,返回一个列表类型的分词结果,存在冗余>>> jieba.lcut_for_search("中华人民共和国是伟大的")['中华', '华人', '人民', '共和', '共和国', '中华人民共和国', '是', '伟大', '的']#向分词词典增加新词w>>>jieba.add_word("蟒蛇语言")

jieba分词要点

jieba.lcut(s)

6.6 实例10: 文本词频统计

6.6.1 "文本词频统计"问题分析

问题分析

文本词频统计

需求:一篇文章,出现了哪些词?哪些词出现得最多?

该怎么做呢?

英文文本 -> 中文文本

英文文本:Hamet 分析词频

https://python123.io/resources/pye/hamlet.txt

中文文本:《三国演义》 分析人物

https://python123.io/resources/pye/threekingdoms.txt

6.6.2 "Hamlet英文词频统计"实例讲解

文本去噪及归一化使用字典表达词频

#CalHamletV1.pydef getText():txt = open("hamlet.txt", "r").read()txt = txt.lower()for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':txt = txt.replace(ch, " ")return txthamletTxt = getText()words = hamletTxt.split()counts = {}for word in words:counts[word] = counts.get(word,0) + 1items = list(counts.items())items.sort(key=lambda x:x[1], reverse=True)for i in range(10):word, count = items[i]print("{0:<10}{1:>5}".format(word, count))

运行结果:

运行结果由大到小排序观察单词出现次数

the 1138and 965to754of669you 550i 542a 542my514hamlet462in436

6.6.3 "《三国演义》人物出场统计"实例讲解

中文文本分词使用字典表达词频

#CalThreeKingdomsV1.pyimport jiebatxt = open("threekingdoms.txt", "r", encoding="utf-8").read()words = jieba.lcut(txt)counts = {}for word in words:if len(word) == 1:continueelse:counts[word] = counts.get(word,0) + 1items = list(counts.items())items.sort(key=lambda x:x[1], reverse=True)for i in range(15):word, count = items[i]print("{0:<10}{1:>5}".format(word, count))

运行结果:

曹操953孔明836将军772却说656玄德585关公510丞相491二人469不可440荆州425玄德曰 390孔明曰 390不能384如此378张飞358

《三国演义》人物出场统计

将词频与人物相关联,面向问题

词频统计 ->人物统计

中文文本分词使用字典表达词频扩展程序解决问题

#CalThreeKingdomsV2.pyimport jiebatxt = open("threekingdoms.txt", "r", encoding="utf-8").read()excludes = {"将军","却说","荆州","二人","不可","不能","如此"}words = jieba.lcut(txt)counts = {}for word in words:if len(word) == 1:continueelif word == "诸葛亮" or word == "孔明曰":rword = "孔明"elif word == "关公" or word == "云长":rword = "关羽"elif word == "玄德" or word == "玄德曰":rword = "刘备"elif word == "孟德" or word == "丞相":rword = "曹操"else:rword = wordcounts[rword] = counts.get(rword,0) + 1for word in excludes:del counts[word]items = list(counts.items())items.sort(key=lambda x:x[1], reverse=True)for i in range(10):word, count = items[i]print("{0:<10}{1:>5}".format(word, count))

运行结果:

#CalThreeKingdomsV2.pyimport jiebatxt = open("threekingdoms.txt", "r", encoding="utf-8").read()excludes = {"将军","却说","荆州","二人","不可","不能","如此"}words = jieba.lcut(txt)counts = {}for word in words:if len(word) == 1:continueelif word == "诸葛亮" or word == "孔明曰":rword = "孔明"elif word == "关公" or word == "云长":rword = "关羽"elif word == "玄德" or word == "玄德曰":rword = "刘备"elif word == "孟德" or word == "丞相":rword = "曹操"else:rword = wordcounts[rword] = counts.get(rword,0) + 1for word in excludes:del counts[word]items = list(counts.items())items.sort(key=lambda x:x[1], reverse=True)for i in range(10):word, count = items[i]print("{0:<10}{1:>5}".format(word, count))

根据结果进一步优化

隆重发布《三国演义》人物出场顺序前20:

曹操、孔明、刘备、关羽、张飞、吕布、赵云、孙权、司马懿、周瑜、袁绍、马超、魏延、黄忠、姜维、马岱、庞德、孟获、刘表、夏侯惇

6.6.4 "文本词频统计"举一反三

应用问题的扩展

《红楼梦》、《西游记》、《水浒传》…政府工作报告、科研论文、新闻报道 …进一步呢? 未来还有词云…

第7章 文件和数据格式化

7.1 文件的使用7.2 实例11: 自动轨迹绘制7.3 一维数据的格式化和处理7.4 二维数据的格式化和处理7.5 模块6: wordcloud库的使用7.6 实例12: 政府工作报告词云

方法论

从Python角度理解的文件和数据表示

实践能力

学会编写带有文件输入输出的程序

7.1 文件的使用

7.1.1文件的类型7.1.2文件的打开和关闭7.1.3文件内容的读取7.1.4数据的文件写入

7.1.1文件的类型

文件的理解

文件是数据的抽象和集合

文件是存储在辅助存储器上的数据序列文件是数据存储的一种形式文件展现形态:文本文件和二进制文件

文本文件 vs. 二进制文件

文件文件和二进制文件只是文件的展示方式本质上,所有文件都是二进制形式存储形式上,所有文件采用两种方式展示

文件是数据的抽象和集合

由单一特定编码组成的文件,如UTF-8编码由于存在编码,也被看成是存储着的长字符串适用于例如:.txt文件、.py文件等直接由比特0和1组成,没有统一字符编码一般存在二进制0和1的组织结构,即文件格式适用于例如:.png文件、.avi文件等

文本文件 vs. 二进制文件

7.1.2文件的打开和关闭

文件处理的步骤: 打开-操作-关闭

文件的打开

文件路径

打开模式

文本形式、只读模式、默认值

f = open(“f.txt”)文本形式、只读模式、同默认值

f = open(“f.txt”, “rt”)文本形式、覆盖写模式

f = open(“f.txt”, “w”)文本形式、追加写模式+ 读文件

f = open(“f.txt”, “a+”)文本形式、创建写模式

f = open(“f.txt”, “x”)二进制形式、只读模式

f = open(“f.txt”, “b”)二进制形式、覆盖写模式

f = open(“f.txt”, “wb”)

文件的关闭

<变量名>.close()

文件的使用

7.1.3文件内容的读取

#这段代码没有运行>>>s = f.read(2)中国>>>s = f.readline()中国是一个伟大的国家!>>>s = f.readlines()['中国是一个伟大的国家!']

文件的全文本操作

遍历全文本:方法一

一次读入,统一处理

fname = input("请输入要打开的文件名称:")fo = open(fname,"r")txt = fo.read()#对全文txt进行处理fo.close()

运行报错(?):

txt = fo.read()UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 2: illegal multibyte sequence

遍历全文本:方法二

按数量读入,逐步处理

fname = input("请输入要打开的文件名称:")fo = open(fname,"r")txt = fo.read(2)while txt != "": #对txt进行处理txt = fo.read(2)fo.close()

文件的逐行操作

逐行遍历文件:方法一

一次读入,分行处理

fname = input("请输入要打开的文件名称:")fo = open(fname,"r")for line in fo.readlines():print(line)fo.close()

逐行遍历文件:方法二

分行读入,逐行处理

fname = input("请输入要打开的文件名称:")fo = open(fname,"r")for line in fo:print(line)fo.close()

7.1.4数据的文件写入

>>>f.write("中国是一个伟大的国家!")>>>ls = ["中国", "法国", "美国"]>>>f.writelines(ls)中国法国美国>>>f.seek(0) #回到文件开头

文件的写入

写入一个字符串列表

fo = open("output.txt","w+")ls = ["中国", "法国", "美国"]fo.writelines(ls)for line in fo: print(line)fo.close()>>> (没有任何输出)

fo = open("output.txt","w+")ls = ["中国", "法国", "美国"]fo.writelines(ls)fo.seek(0)for line in fo:print(line)fo.close()>>>中国法国美国

单元小结

文件的使用

文件的使用方式:打开-操作-关闭文本文件&二进制文件,open( , )和.close()文件内容的读取:.read() .readline() .readlines()数据的文件写入:.write() .writelines() .seek()

7.2 实例11: 自动轨迹绘制

7.2.1 "自动轨迹绘制"问题分析

问题分析

自动轨迹绘制

需求:根据脚本来绘制图形?不通过写代码而通过写数据绘制轨迹数据脚本是自动化最重要的第一步

自动轨迹绘制

7.2.2 "自动轨迹绘制"实例讲解

自动轨迹绘制

基本思路

步骤1:定义数据文件格式(接口)步骤2:编写程序,根据文件接口解析参数绘制图形步骤3:编制数据文件

数据接口定义

非常具有个性色彩

#AutoTraceDraw.pyimport turtle as tt.title('自动轨迹绘制')t.setup(800, 600, 0, 0)t.pencolor("red")t.pensize(5)#数据读取datals = []f = open("data.txt")for line in f:line = line.replace("\n","")datals.append(list(map(eval, line.split(","))))f.close()#自动绘制for i in range(len(datals)):t.pencolor(datals[i][3],datals[i][4],datals[i][5])t.fd(datals[i][0])if datals[i][1]:t.right(datals[i][2])else:t.left(datals[i][2])#data.txt300,0,144,1,0,0300,0,144,0,1,0300,0,144,0,0,1300,0,144,1,1,0300,0,108,0,1,1184,0,72,1,0,1184,0,72,0,0,0184,0,72,0,0,0184,0,72,0,0,0184,1,72,1,0,1184,1,72,0,0,0184,1,72,0,0,0184,1,72,0,0,0184,1,72,0,0,0184,1,720,0,0,0

运行结果:

7.2.3 "自动轨迹绘制"举一反三

理解方法思维

自动化思维:数据和功能分离,数据驱动的自动运行接口化设计:格式化设计接口,清晰明了二维数据应用:应用维度组织数据,二维数据最常用

应用问题的扩展

扩展接口设计,增加更多控制接口扩展功能设计,增加弧形等更多功能扩展应用需求,发展自动轨迹绘制到动画绘制

小花絮

如何进一步提高Python编程能力?

三个步骤,请参考:https://python123.io/python

第一步:学好Python语法,即掌握非库功能,练好内功第二步:学好Python领域,数据分析、Web开发、人工智能,找准了深入学第三步:学好计算机专业知识,构建“系统”是本领,需要专业计算机知识

数据结构、算法、计算机网络、组成原理、操作系统、网络安全、体系结构、软件工程…

7.3 一维数据的格式化和处理

7.3.1 数据组织的维度7.3.2 一维数据的表示7.3.3 一维数据的存储7.3.4 一维数据的处理

7.3.1 数据组织的维度

一维数据

由对等关系的有序或无序数据构成,采用线性方式组织

3.1413, 3.1398, 3.1404, 3.1401, 3.1349, 3.1376

对应列表、数组和集合等概念

二维数据

由多个一维数据构成,是一维数据的组合形式

表格是典型的二维数据

其中,表头是二维数据的一部分

多维数据

由一维或二维数据在新维度上扩展形成

高维数据

仅利用最基本的二元关系展示数据间的复杂结构

{"firstName" : "Tian" , "lastName" : "Song" ,"address" : {"streetAddr" : "中关村南大街5号" ,"city" : "北京市" , "zipcode" : "100081"} ,"professional" : ["Computer Networking" , "Security"]}

数据的操作周期

存储 <-> 表示 <-> 操作

7.3.2 一维数据的表示

如果数据间有序:使用列表类型

ls = [3.1398, 3.1349, 3.1376]

列表类型可以表达一维有序数据for循环可以遍历数据,进而对每个数据进行处理

如果数据间无序:使用集合类型

st = {3.1398, 3.1349, 3.1376}

集合类型可以表达一维无序数据for循环可以遍历数据,进而对每个数据进行处理

7.3.3 一维数据的存储

存储方式一:空格分隔

中国 美国 日本 德国 法国 英国 意大利

使用一个或多个空格分隔进行存储,不换行缺点:数据中不能存在空格

存储方式二:逗号分隔

中国,美国,日本,德国,法国,英国,意大利

使用英文半角逗号分隔数据进行存储,不换行缺点:数据中不能有英文逗号

存储方式三:其他方式

中国$美国$日本$德国$法国$英国$意大利

使用其他符号或符号组合分隔,建议采用特殊符号缺点:需要根据数据特点定义,通用性较差

7.3.4 一维数据的处理

数据的处理

存储 <-> 表示

将存储的数据读入程序将程序表示的数据写入文件

一维数据的读入处理

从空格分隔的文件中读入数据

中国 美国 日本 德国 法国 英国 意大利

从特殊符号分隔的文件中读入数据

中国$美国$日本$德国$法国$英国$意大利

一位数据的写入处理

采用空格分隔方式将数据写入文件

ls = ['中国', '美国', '日本']f = open(fname, 'w')f.write(' '.join(ls))f.close()

采用特殊分隔方式将数据写入文件

ls = ['中国', '美国', '日本']f = open(fname, 'w')f.write('$'.join(ls)) f.close()

单元小结

一维数据的格式化和处理

数据的维度:一维、二维、多维、高维一维数据的表示:列表类型(有序)和集合类型(无序)一维数据的存储:空格分隔、逗号分隔、特殊符号分隔一维数据的处理:字符串方法 .split() 和 .join()

7.4 二维数据的格式化和处理

7.4.1 二维数据的表示7.4.2 CSV数据存储格式7.4.3 二维数据的存储7.4.4 二维数据的处理

7.4.1 二维数据的表示

使用列表类型

使用两层for循环遍历每个元素外层列表中每个元素可以对应一行,也可以对应一列

一二维数据的Python表示

数据维度是数据的组织形式

7.4.2 CSV数据存储格式

CSV: Comma-Separated Values

国际通用的一二维数据存储格式,一般.csv扩展名每行一个一维数据,采用逗号分隔,无空行Excel和一般编辑软件都可以读入或另存为csv文件

如果某个元素缺失,逗号仍要保留二维数据的表头可以作为数据存储,也可以另行存储逗号为英文半角逗号,逗号与数据之间无额外空格

7.4.3 二维数据的存储

按行存?按列存?

按行存或者按列存都可以,具体由程序决定一般索引习惯:ls[row][column],先行后列根据一般习惯,外层列表每个元素是一行,按行存

7.4.4 二维数据的处理

二维数据的读入处理

从CSV格式的文件中读入数据

fo = open(fname)ls = []for line in fo:line = line.replace("\n","")ls.append(line.split(",")) fo.close()

二维数据的写入处理

将数据写入CSV格式的文件

ls = [[], [], []] #二维列表f = open(fname, 'w')for item in ls:f.write(','.join(item) + '\n') f.close()

二维数据的逐一处理

采用二层循环

ls = [[1,2], [3,4], [5,6]] #二维列表for row in ls:for column in row:print(column)

单元小结

二维数据的格式化和处理

二维数据的表示:列表类型,其中每个元素也是一个列表CSV格式:逗号分隔表示一维,按行分隔表示二维二维数据的处理:for循环+.split()和.join()

7.5 模块6: wordcloud库的使用

7.5.1 wordcloud库基本介绍

wordcloud库概述

wordcloud是优秀的词云展示第三方库

词云以词语为基本单位,更加直观和艺术地展示文本

wordcloud库的安装

(cmd命令行) pip install wordcloud

7.5.2 wordcloud库使用说明

wordcloud库基本使用

wordcloud库把词云当作一个WordCloud对象

wordcloud.WordCloud()代表一个文本对应的词云可以根据文本中词语出现的频率等参数绘制词云词云的绘制形状、尺寸和颜色都可以设定

wordcloud库常规方法

w = wordcloud.WordCloud()

以WordCloud对象为基础配置参数、加载文本、输出文件步骤1:配置对象参数步骤2:加载词云文本步骤3:输出词云文件

import wordcloudc = wordcloud.WordCloud()c.generate("wordcloud by Python")c.to_file("pywordcloud.png")

配置对象参数

w = wordcloud.WordCloud(<参数>)

#指定词云对象生成图片的宽度,默认400像素>>>w=wordcloud.WordCloud(width=600)#指定词云对象生成图片的高度,默认200像素>>>w=wordcloud.WordCloud(height=400)#指定词云中字体的最小字号,默认4号>>>w=wordcloud.WordCloud(min_font_size=10)#指定词云中字体的最大字号,根据高度自动调节>>>w=wordcloud.WordCloud(max_font_size=20)#指定词云中字体字号的步进间隔,默认为1>>>w=wordcloud.WordCloud(font_step=2)#指定字体文件的路径,默认None>>>w=wordcloud.WordCloud(font_path="msyh.ttc")#指定词云显示的最大单词数量,默认200>>>w=wordcloud.WordCloud(max_words=20)#指定词云的排除词列表,即不显示的单词列表>>>w=wordcloud.WordCloud(stop_words={"Python"})# 指定词云形状,默认为长方形,需要引用imread()函数>>>from scipy.misc import imread>>>mk=imread("pic.png")>>>w=wordcloud.WordCloud(mask=mk)#指定词云图片的背景颜色,默认为黑色>>>w=wordcloud.WordCloud(background_color="white")

wordcloud应用实例

以空格分隔单词

import wordcloudtxt = "life is short, you need python"w = wordcloud.WordCloud( \background_color = "white")w.generate(txt)w.to_file("pywcloud.png")

运行结果:

#中文需要先分词并组成空格分隔字符串import jiebaimport wordcloudtxt = "程序设计语言是计算机能够理解和\识别用户操作意图的一种交互体系,它按照\特定规则组织计算机指令,使计算机能够自\动进行各种运算处理。"w = wordcloud.WordCloud( width=1000,\font_path="msyh.ttc",height=700)w.generate(" ".join(jieba.lcut(txt)))w.to_file("pywcloud.png")

运行结果:

7.6 实例12: 政府工作报告词云

7.6.1 "政府工作报告词云"问题分析

问题分析

直观理解政策文件

需求:对于政府工作报告等政策文件,如何直观理解?体会直观的价值:生成词云 & 优化词云

政府工作报告等文件-> 有效展示的词云

https://python123.io/resources/pye/新时代中国特色社会主义.txt

https://python123.io/resources/pye/关于实施乡村振兴战略的意见.txt

7.6.2 "政府工作报告词云"实例讲解

政府工作报告词云

基本思路

步骤1:读取文件、分词整理步骤2:设置并输出词云步骤3:观察结果,优化迭代

#GovRptWordCloudv1.pyimport jiebaimport wordcloudf = open("新时代中国特色社会主义.txt", "r", encoding="utf-8")t = f.read()f.close()ls = jieba.lcut(t)txt = " ".join(ls)w = wordcloud.WordCloud( font_path = "msyh.ttc",\width = 1000, height = 700, background_color = "white", \)w.generate(txt)w.to_file("grwordcloud.png")

运行结果:

#GovRptWordCloudv1.pyimport jiebaimport wordcloudf = open("关于实施乡村振兴战略的意见.txt", "r", encoding="utf-8")t = f.read()f.close()ls = jieba.lcut(t)txt = " ".join(ls)w = wordcloud.WordCloud( font_path = "msyh.ttc",\width = 1000, height = 700, background_color = "white", \)w.generate(txt)w.to_file("grwordcloud.png")

运行结果:

#GovRptWordCloudv1.pyimport jiebaimport wordcloudf = open("新时代中国特色社会主义.txt", "r", encoding="utf-8")t = f.read()f.close()ls = jieba.lcut(t)txt = " ".join(ls)w = wordcloud.WordCloud( font_path = "msyh.ttc",\width = 1000, height = 700, background_color = "white", \max_words = 15)w.generate(txt)w.to_file("grwordcloud.png")

运行结果:

#GovRptWordCloudv1.pyimport jiebaimport wordcloudf = open("关于实施乡村振兴战略的意见.txt", "r", encoding="utf-8")t = f.read()f.close()ls = jieba.lcut(t)txt = " ".join(ls)w = wordcloud.WordCloud( font_path = "msyh.ttc",\width = 1000, height = 700, background_color = "white", \max_words = 15)w.generate(txt)w.to_file("grwordcloud.png")

运行结果:

政府工作报告词云

更有形的词云

#GovRptWordCloudv2.pyimport jiebaimport wordcloudfrom imageio import imreadmask = imread("fivestar.png")f = open("新时代中国特色社会主义.txt", "r", encoding="utf-8")t = f.read()f.close()ls = jieba.lcut(t)txt = " ".join(ls)w = wordcloud.WordCloud( font_path = "msyh.ttc", mask = mask\width = 1000, height = 700, background_color = "white", \)w.generate(txt)w.to_file("grwordcloud.png")

#GovRptWordCloudv2.pyimport jiebaimport wordcloudfrom imageio import imreadmask = imread("bitlogo.png")f = open("新时代中国特色社会主义.txt", "r", encoding="utf-8")t = f.read()f.close()ls = jieba.lcut(t)txt = " ".join(ls)w = wordcloud.WordCloud( font_path = "msyh.ttc", mask = mask\width = 1000, height = 700, background_color = "white", \ )w.generate(txt)w.to_file("grwordcloud.png")

7.6.3 "政府工作报告词云"举一反三

扩展能力

了解wordcloud更多参数,扩展词云能力特色词云:设计一款属于自己的特色词云风格更多文件:用更多文件练习词云生成

第8章 程序设计方法学

8.1 实例13: 体育竞技分析8.2 Python程序设计思维8.3 Python第三方库安装8.4 模块7: os库的基本使用8.5 实例14: 第三方库自动安装脚本

方法论

理解并掌握Python程序设计思维

实践能力

学会编写更有设计感的程序

8.1 实例13: 体育竞技分析

8.1.1 "体育竞技分析"问题分析

问题分析

体育竞技分析

需求:毫厘是多少?如何科学分析体育竞技比赛?输入:球员的水平输出:可预测的比赛成绩

体育竞技分析:模拟N场比赛

计算思维:抽象 + 自动化模拟:抽象比赛过程 + 自动化执行N场比赛当N越大时,比赛结果分析会越科学

比赛规则

双人击球比赛:A & B,回合制,5局3胜 - 开始时一方先发球,直至判分,接下来胜者发球球员只能在发球局得分,15分胜一局

8.1.2 自顶向下和自底向上

自顶向下(设计)

解决复杂问题的有效方法

将一个总问题表达为若干个小问题组成的形式使用同样方法进一步分解小问题直至,小问题可以用计算机简单明了的解决

(看到这里,突然明白IC验证时,为什么会有自顶向下和自底向上)

自底向上(执行)

逐步组建复杂系统的有效测试方法

分单元测试,逐步组装按照自顶向下相反的路径操作直至,系统各部分以组装的思路都经过测试和验证

8.1.3 "体育竞技分析"实例讲解

体育竞技分析

程序总体框架及步骤

步骤1:打印程序的介绍性信息

-printInfo()步骤2:获得程序运行参数:proA, proB, n

-getInputs()步骤3:利用球员A和B的能力值,模拟n局比赛

-simNGames()步骤4:输出球员A和B获胜比赛的场次及概率

-printSummary()

#第一阶段def printSummary(winsA, winsB):n = winsA + winsBprint("竞技分析开始,共模拟{}场比赛".format(n))print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA/n))print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB/n))#第二阶段def simNGames(n, probA, probB):winsA, winsB = 0, 0for i in range(n):scoreA, scoreB = simOneGame(probA, probB)if scoreA > scoreB:winsA += 1else:winsB += 1return winsA, winsB#第三阶段def simOneGame(probA, probB):scoreA, scoreB = 0, 0serving = "A"while not gameOver(scoreA, scoreB):if serving == "A":if random() < probA:scoreA += 1else:serving="B"else:if random() < probB:scoreB += 1else:serving="A"return scoreA, scoreBdef gameOver(a,b):return a==15 or b==15

8.1.4 "体育竞技分析"举一反三

理解自顶向下和自底向上

理解自顶向下的设计思维:分而治之理解自底向上的执行思维:模块化集成自顶向下是“系统”思维的简化

应用问题的扩展

扩展比赛参数,增加对更多能力对比情况的判断扩展比赛设计,增加对真实比赛结果的预测扩展分析逻辑,反向推理,用胜率推算能力?

8.2 Python程序设计思维

8.2.1 计算思维与程序设计8.2.2 计算生态与Python语言8.2.3 用户体验与软件产品8.2.4 基本的程序设计模式

推荐听课

单元小结

Python程序设计思维

计算思维:抽象计算过程和自动化执行计算生态:竞争发展、相互依存、快速更迭用户体验:进度展示、异常处理等IPO、自顶向下、模块化、配置化、应用开发的四个步骤

8.3 Python第三方库安装

8.3.1 看见更大的Python世界8.3.2 第三方库的pip安装方法8.3.3 第三方库的集成安装方法8.3.4 第三方库的文件安装方法

8.3.1 看见更大的Python世界

Python社区

>13万个第三方库

/

PyPI

PyPI: Python Package IndexPSF维护的展示全球Python计算生态的主站学会检索并利用PyPI,找到合适的第三方库开发程序

实例:开发与区块链相关的程序

第1步:在搜索 blockchain第2步:挑选适合开发目标的第三方库作为基础第3步:完成自己需要的功能

实例:开发与区块链相关的程序

安装Python第三方库

三种方法

方法1(主要方法): 使用pip命令方法2: 集成安装方法方法3: 文件安装方法

受教了,之前是先学的网络爬虫,安装第三方库碰了不少灰,看来基础知识真的很重要。人们往往知道一些东西,但就是自己做不到

8.3.2 第三方库的pip安装方法

常用的pip命令

强调一点:将下载源切换到本国,否则经常报错

安装指定的第三方库

D:\>pip install <第三方库名>使用-U标签更新已安装的指定第三方库

D:\>pip install -U <第三方库名>卸载指定的第三方库

D:\>pip uninstall <第三方库名>下载但不安装指定的第三方库

D:\>pip download <第三方库名>列出某个指定第三方库的详细信息

D:\>pip show <第三方库名>根据关键词在名称和介绍中搜索第三方库

D:\>pip search <关键词>列出当前系统已经安装的第三方库

D:\>pip list

主要方法,适合99%以上情况

适合Windows、Mac和Linux等操作系统未来获取第三方库的方式,目前的主要方式适合99%以上情况,需要联网安装

8.3.3 第三方库的集成安装方法

集成安装:结合特定Python开发工具的批量安装

Anaconda

https://www.continuum.io

支持近800个第三方库包含多个主流工具适合数据计算领域开发

8.3.4 第三方库的文件安装方法

为什么有些第三方库用pip可以下载,但无法安装?

某些第三方库pip下载后,需要编译再安装如果操作系统没有编译环境,则能下载但不能安装可以直接下载编译后的版本用于安装吗?

http://www.lfd.uci.edu/~gohlke/pythonlibs/

实例:安装wordcloud库

步骤1:在UCI页面上搜索wordcloud步骤2:下载对应版本的文件步骤3:使用pip install <文件名>安装

单元小结

Python第三方库安装

PyPI:Python Package Indexpip命令的各种用法Anaconda集成开发工具及安装方法UCI页面的“补丁”安装方法

8.4 模块7: os库的基本使用

8.4.1 os库基本介绍

os库提供通用的、基本的操作系统交互功能

os库是Python标准库,包含几百个函数常用路径操作、进程管理、环境参数等几类路径操作:os.path子库,处理文件路径及信息进程管理:启动系统中其他程序环境参数:获得系统软硬件信息等环境参数

8.4.2 os库之路径操作

os.path子库以path为入口,用于操作和处理文件路径

import os.path或import os.path as op

#返回path在当前系统中的绝对路径>>>os.path.abspath("file.txt")'C:\\Users\\Tian Song\\Python36-32\\file.txt'#归一化path的表示形式,统一用\\分隔路径>>>os.path.normpath("D://PYE//file.txt")'D:\\PYE\\file.txt'#返回当前程序与文件之间的相对路径 (relative path)>>>os.path.relpath("C://PYE//file.txt")'..\\..\\..\\..\\..\\..\\..\\PYE\\file.txt'#返回path中的目录名称>>>os.path.dirname("D://PYE//file.txt")'D://PYE'#返回path中最后的文件名称>>>os.path.basename("D://PYE//file.txt")'file.txt'#组合path与paths,返回一个路径字符串>>>os.path.join("D:/", "PYE/file.txt")'D:/PYE/file.txt'#判断path对应文件或目录是否存在,返回True或False>>>os.path.exists("D://PYE//file.txt")False#判断path所对应是否为已存在的文件,返回True或False>>>os.path.isfile("D://PYE//file.txt")True#判断path所对应是否为已存在的目录,返回True或False>>>os.path.isdir("D://PYE//file.txt")False#返回path对应文件或目录上一次的访问时间>>>os.path.getatime("D:/PYE/file.txt")1518356633.7551725#返回path对应文件或目录最近一次的修改时间>>>os.path.getmtime("D:/PYE/file.txt")1518356633.7551725#返回path对应文件或目录的创建时间>>time.ctime(os.path.getctime("D:/PYE/file.txt"))'Sun Feb 11 21:43:53 '#返回path对应文件的大小,以字节为单位>>>os.path.getsize("D:/PYE/file.txt")180768

8.4.3 os库之进程管理

os.system(command)

执行程序或命令command在Windows系统中,返回值为cmd的调用返回信息

8.4.4 os库之环境参数

获取或改变系统环境信息

#修改当前程序操作的路径>>>os.chdir("D:")#返回程序的当前路径>>>os.getcwd()'D:\\'#获得当前系统登录用户名称>>>os.getlogin()'Tian Song'#获得当前系统的CPU数量>>>os.cpu_count()8#获得n个字节长度的随机字符串,通常用于加解密运算>>>os.urandom(10)b'7\xbe\xf2!\xc1=\x01gL\xb3'

8.5 实例14: 第三方库自动安装脚本

8.5.1 "第三方库自动安装脚本"问题分析

问题分析

第三方库自动安装脚本

需求:批量安装第三方库需要人工干预,能否自动安装?自动执行pip逐一根据安装需求安装

如何自动执行一个程序?例如:pip?

第三方库自动安装脚本

8.5.2 "第三方库自动安装脚本"实例讲解

#BatchInstall.pyimport oslibs = {"numpy","matplotlib","pillow","sklearn","requests",\"jieba","beautifulsoup4","wheel","networkx","sympy",\"pyinstaller","django","flask","werobot","pyqt5",\"pandas","pyopengl","pypdf2","docopt","pygame"}try:for lib in libs:os.system("pip install " + lib)print("Successful")except:print("Failed Somehow")

8.5.3 "第三方库自动安装脚本"举一反三

自动化脚本+

编写各类自动化运行程序的脚本,调用已有程序扩展应用:安装更多第三方库,增加配置文件扩展异常检测:捕获更多异常类型,程序更稳定友好

第9章 Python计算生态概览

9.1 从数据处理到人工智能9.2 实例15: 霍兰德人格分析雷达图9.3 从Web解析到网络空间9.4 从人机交互到艺术设计9.5 实例16: 玫瑰花绘制

方法论

纵览Python计算生态,看见更大的世界

实践能力

初步编写带有计算生态的复杂程序

9.1 从数据处理到人工智能

9.1.1 Python库之数据分析9.1.2 Python库之数据可视化9.1.3 Python库之文本处理9.1.4 Python库之机器学习

数据表示->数据清洗->数据统计->数据可视化->数据挖掘->人工智能

数据表示:采用合适方式用程序表达数据数据清理:数据归一化、数据转换、异常值处理数据统计:数据的概要理解,数量、分布、中位数等数据可视化:直观展示数据内涵的方式数据挖掘:从数据分析获得知识,产生数据外的价值人工智能:数据/语言/图像/视觉等方面深度分析与决策

9.1.1 Python库之数据分析

Numpy: 表达N维数组的最基础库

Python接口使用,C语言实现,计算速度优异Python数据分析及科学计算的基础库,支撑Pandas等提供直接的矩阵运算、广播函数、线性代数等功能

Pandas: Python数据分析高层次应用库

提供了简单易用的数据结构和数据分析工具理解数据类型与索引的关系,操作索引即操作数据Python最主要的数据分析功能库,基于Numpy开发

SciPy: 数学、科学和工程计算功能库

提供了一批数学算法及工程数据运算功能类似Matlab,可用于如傅里叶变换、信号处理等应用Python最主要的科学计算功能库,基于Numpy开发

9.1.2 Python库之数据可视化

Matplotlib: 高质量的二维数据可视化功能库

提供了超过100种数据可视化展示效果通过matplotlib.pyplot子库调用各可视化效果Python最主要的数据可视化功能库,基于Numpy开发

Seaborn: 统计类数据可视化功能库

提供了一批高层次的统计类数据可视化展示效果主要展示数据间分布、分类和线性关系等内容基于Matplotlib开发,支持Numpy和Pandas

Mayavi:三维科学数据可视化功能库

提供了一批简单易用的3D科学计算数据可视化展示效果目前版本是Mayavi2,三维可视化最主要的第三方库支持Numpy、TVTK、Traits、Envisage等第三方库

9.1.3 Python库之文本处理

PyPDF2:用来处理pdf文件的工具集

提供了一批处理PDF文件的计算功能支持获取信息、分隔/整合文件、加密解密等完全Python语言实现,不需要额外依赖,功能稳定

http://mstamy2.github.io/PyPDF2

from PyPDF2 import PdfFileReader, PdfFileMergermerger = PdfFileMerger()input1 = open("document1.pdf", "rb")input2 = open("document2.pdf", "rb")merger.append(fileobj = input1, pages = (0,3))merger.merge(position = 2, fileobj = input2, pages = (0,1))output = open("document-output.pdf", "wb")merger.write(output)

NLTK:自然语言文本处理第三方库

提供了一批简单易用的自然语言文本处理功能支持语言文本分类、标记、语法句法、语义分析等最优秀的Python自然语言处理库

Python-docx:创建或更新Microsoft Word文件的第三方库

提供创建或更新.doc .docx等文件的计算功能增加并配置段落、图片、表格、文字等,功能全面

http://python-docx.readthedocs.io/en/latest/index.html

from docx import Documentdocument = Document()document.add_heading('Document Title', 0)p = document.add_paragraph('A plain paragraph having some ')document.add_page_break()document.save('demo.docx')

9.1.4 Python库之机器学习

Scikit-learn:机器学习方法工具集

提供一批统一化的机器学习方法功能接口提供聚类、分类、回归、强化学习等计算功能机器学习最基本且最优秀的Python第三方库

TensorFlow:AlphaGo背后的机器学习计算框架

谷歌公司推动的开源机器学习框架将数据流图作为基础,图节点代表运算,边代表张量应用机器学习方法的一种方式,支撑谷歌人工智能应用

MXNet:基于神经网络的深度学习计算框架

提供可扩展的神经网络及深度学习计算功能可用于自动驾驶、机器翻译、语音识别等众多领域Python最重要的深度学习计算框架

单元小结

Numpy、Pandas、SciPyMatplotlib、Seaborn、MayaviPyPDF2、NLTK、python-docxScikit-learn、TensorFlow、MXNet

小花絮

小议"函数式编程"

"函数式编程"用函数将程序组织起来,貌似很流行,为何不早学呢?

第一,函数式编程主要源于C语言,Python不是C,这说法不流行第二,不要纠结于名字,关键在于按照"控制流"编程的过程式编程思维第三,Python编程中函数不必须,因此更灵活,更探寻本质

如果您学过其他编程语言,不要被束缚,从本质上看待Python才更有趣!

9.2 实例15: 霍兰德人格分析雷达图

9.2.1 "霍兰德人格分析雷达图"问题分析

问题分析

雷达图 Radar Chart

霍兰德人格分析

霍兰德认为:人格兴趣与职业之间应有一种内在的对应关系人格分类:研究型、艺术型、社会型、企业型、传统型、现实性职业:工程师、实验员、艺术家、推销员、记事员、社会工作者

霍兰德人格分析雷达图

需求:雷达图方式验证霍兰德人格分析

输入:各职业人群结合兴趣的调研数据

输出:雷达图

通用雷达图绘制:matplotlib库 - 专业的多维数据表示:numpy库 - 输出:雷达图

9.2.2 "霍兰德人格分析雷达图"实例展示

#HollandRadarDrawimport numpy as npimport matplotlib.pyplot as pltimport matplotlibmatplotlib.rcParams['font.family']='SimHei'radar_labels = np.array(['研究型(I)','艺术型(A)','社会型(S)',\'企业型(E)','常规型(C)','现实型(R)']) #雷达标签nAttr = 6data = np.array([[0.40, 0.32, 0.35, 0.30, 0.30, 0.88],[0.85, 0.35, 0.30, 0.40, 0.40, 0.30],[0.43, 0.89, 0.30, 0.28, 0.22, 0.30],[0.30, 0.25, 0.48, 0.85, 0.45, 0.40],[0.20, 0.38, 0.87, 0.45, 0.32, 0.28],[0.34, 0.31, 0.38, 0.40, 0.92, 0.28]]) #数据值data_labels = ('艺术家', '实验员', '工程师', '推销员', '社会工作者','记事员')angles = np.linspace(0, 2*np.pi, nAttr, endpoint=False)data = np.concatenate((data, [data[0]]))angles = np.concatenate((angles, [angles[0]]))fig = plt.figure(facecolor="white")plt.subplot(111, polar=True)plt.plot(angles,data,'o-', linewidth=1, alpha=0.2)plt.fill(angles,data, alpha=0.25)plt.thetagrids(angles*180/np.pi, radar_labels,frac = 1.2)plt.figtext(0.52, 0.95, '霍兰德人格分析', ha='center', size=20)legend = plt.legend(data_labels, loc=(0.94, 0.80), labelspacing=0.1)plt.setp(legend.get_texts(), fontsize='large')plt.grid(True)plt.savefig('holland_radar.jpg')plt.show()

运行结果:

报错

9.2.3 "霍兰德人格分析雷达图"举一反三

目标 + 沉浸 + 熟练

编程的目标感:寻找感兴趣的目标,寻(wa)觅(jue)之编程的沉浸感:寻找可实现的方法,思(zuo)考(mo)之编程的熟练度:练习、练习、再练习,熟练之

9.3 从Web解析到网络空间

9.3.1 Python库之网络爬虫9.3.2 Python库之Web信息提取9.3.3 Python库之Web网站开发9.3.4 Python库之网络应用开发

9.3.1 Python库之网络爬虫

Requests: 最友好的网络爬虫功能库

提供了简单易用的类HTTP协议网络爬虫功能支持连接池、SSL、Cookies、HTTP(S)代理等Python最主要的页面级网络爬虫功能库

http://www.python-/

Scrapy: 优秀的网络爬虫框架

提供了构建网络爬虫系统的框架功能,功能半成品支持批量和定时网页爬取、提供数据处理流程等Python最主要且最专业的网络爬虫框架

pyspider: 强大的Web页面爬取系统

提供了完整的网页爬取系统构建功能支持数据库后端、消息队列、优先级、分布式架构等Python重要的网络爬虫类第三方库

9.3.2 Python库之Web信息提取

Beautiful Soup: HTML和XML的解析库

提供了解析HTML和XML等Web信息的功能又名beautifulsoup4或bs4,可以加载多种解析引擎常与网络爬虫库搭配使用,如Scrapy、requests等

/software/BeautifulSoup/bs4

Re: 正则表达式解析和处理功能库

提供了定义和解析正则表达式的一批通用功能可用于各类场景,包括定点的Web信息提取Python最主要的标准库之一,无需安装

/3.6/library/re.html

Python-Goose: 提取文章类型Web页面的功能库

提供了对Web页面中文章信息/视频等元数据的提取功能针对特定类型Web页面,应用覆盖面较广Python最主要的Web信息提取库

/grangier/python-goose

from goose import Gooseurl = 'http://www.elmundo.es/elmundo//10/28/espana/1351388909.html'g = Goose({'use_meta_language': False, 'target_language':'es'})article = g.extract(url=url)article.cleaned_text[:150]

9.3.3 Python库之Web网站开发

Django: 最流行的Web应用框架

提供了构建Web系统的基本应用框架MTV模式:模型(model)、模板(Template)、视图(Views)Python最重要的Web应用框架,略微复杂的应用框架

Pyramid: 规模适中的Web应用框架

提供了简单方便构建Web系统的应用框架不大不小,规模适中,适合快速构建并适度扩展类应用Python产品级Web应用框架,起步简单可扩展性好

/

from wsgiref.simple_server import make_serverfrom pyramid.config import Configuratorfrom pyramid.response import Responsedef hello_world(request):return Response('Hello World!')if __name__ == '__main__':with Configurator() as config:config.add_route('hello', '/')config.add_view(hello_world, route_name='hello')app = config.make_wsgi_app()server = make_server('0.0.0.0', 6543, app)server.serve_forever()

Flask: Web应用开发微框架

提供了最简单构建Web系统的应用框架特点是:简单、规模小、快速Django > Pyramid > Flask

9.3.4 Python库之网络应用开发

WeRoBot: 微信公众号开发框架

提供了解析微信服务器消息及反馈消息的功能建立微信机器人的重要技术手段

/offu/WeRoBot

import werobotrobot = werobot.WeRoBot(token='tokenhere') @robot.handlerdef hello(message):return 'Hello World!'

对微信每个消息反馈一个Hello World

aip: 百度AI开放平台接口

提供了访问百度AI服务的Python功能接口语音、人脸、OCR、NLP、知识图谱、图像搜索等领域Python百度AI应用的最主要方式

/Baidu-AIP/python-sdk

MyQR: 二维码生成第三方库

提供了生成二维码的系列功能基本二维码、艺术二维码和动态二维码

/sylnsfar/qrcode

单元小结

从Web解析到网络空间

Requests、Scrapy、pyspiderBeautiful Soup、Re、Python-GooseDjango、Pyramid、FlaskWeRobot、aip、MyQR

9.4 从人机交互到艺术设计

9.4.1 Python库之图形用户界面9.4.2 Python库之游戏开发9.4.3 Python库之虚拟现实9.4.4 Python库之图形艺术

9.4.1 Python库之图形用户界面

PyQt5: Qt开发框架的Python接口

提供了创建Qt5程序的Python API接口Qt是非常成熟的跨平台桌面应用开发系统,完备GUI推荐的Python GUI开发第三方库

/software/pyqt

wxPython: 跨平台GUI开发框架

提供了专用于Python的跨平台GUI开发框架理解数据类型与索引的关系,操作索引即操作数据Python最主要的数据分析功能库,基于Numpy开发

PyGObject: 使用GTK+开发GUI的功能库

提供了整合GTK+、WebKitGTK+等库的功能GTK+:跨平台的一种用户图形界面GUI框架实例:Anaconda采用该库构建GUI

https://pygobject.readthedocs.io

9.4.2 Python库之游戏开发

PyGame: 简单的游戏开发功能库

提供了基于SDL的简单游戏开发功能及实现引擎理解游戏对外部输入的响应机制及角色构建和交互机制Python游戏入门最主要的第三方库

Panda3D: 开源、跨平台的3D渲染和游戏开发库

一个3D游戏引擎,提供Python和C++两种接口支持很多先进特性:法线贴图、光泽贴图、卡通渲染等由迪士尼和卡尼基梅隆大学共同开发

cocos2d: 构建2D游戏和图形界面交互式应用的框架

提供了基于OpenGL的游戏开发图形渲染功能支持GPU加速,采用树形结构分层管理游戏对象类型适用于2D专业级游戏开发

/

9.4.3 Python库之虚拟现实

VR Zerot: 在树莓派上开发VR应用的Python库

提供大量与VR开发相关的功能针对树莓派的VR开发库,支持设备小型化,配置简单化非常适合初学者实践VR开发及应用

/WayneKeenan/python-vrzero

pyovr: Oculus Rift的Python开发接口

针对Oculus VR设备的Python开发库基于成熟的VR设备,提供全套文档,工业级应用设备Python+虚拟现实领域探索的一种思路

/cmbruns/pyovr

Vizard: 基于Python的通用VR开发引擎

专业的企业级虚拟现实开发引擎提供详细的官方文档支持多种主流的VR硬件设备,具有一定通用性

/vizard-virtual-reality-software

9.4.4 Python库之图形艺术

Quads: 迭代的艺术

对图片进行四分迭代,形成像素风可以生成动图或静图图像简单易用,具有很高展示度

/fogleman/Quads

ascii_art: ASCII艺术库

将普通图片转为ASCII艺术风格输出可以是纯文本或彩色文本可采用图片格式输出

/jontonsoup4/ascii_art

turtle: 海龟绘图体系

/3/library/turtle.html

单元小结

从人机交互到艺术设计

PyQt5、wxPython、PyGObjectPyGame、Panda3D、cocos2dVR Zero、pyovr、VizardQuads、ascii_art、turtle

小花絮

https://python123.io

这是一段不超过20行的小代码虽短却小有创意,请实践之这是别人的精彩,你的呢?

import turtle as tt.penup()t.seth(-90)t.fd(160)t.pendown()t.pensize(20)t.colormode(255)for j in range(10):t.speed(1000)t.pencolor(25*j,5*j,15*j)t.seth(130)t.fd(220)for i in range(23):t.circle(-80,10)t.seth(100)for i in range (23):t.circle(-80,10)t.fd(220)

9.5 实例16: 玫瑰花绘制

9.5.1 "玫瑰花绘制"问题分析

需求:用Python绘制一朵玫瑰花,献给所思所念输入:你的想象力!输出:玫瑰花

绘制机理:turtle基本图形绘制绘制思想:因人而异思想有多大、世界就有多大

9.5.2 "玫瑰花绘制"实例展示

# RoseDraw.pyimport turtle as t# 定义一个曲线绘制函数def DegreeCurve(n, r, d=1):for i in range(n):t.left(d)t.circle(r, abs(d))# 初始位置设定s = 0.2 # sizet.setup(450*5*s, 750*5*s)t.pencolor("black")t.fillcolor("red")t.speed(100)t.penup()t.goto(0, 900*s)t.pendown()# 绘制花朵形状t.begin_fill()t.circle(200*s,30)DegreeCurve(60, 50*s)t.circle(200*s,30)DegreeCurve(4, 100*s)t.circle(200*s,50)DegreeCurve(50, 50*s)t.circle(350*s,65)DegreeCurve(40, 70*s)t.circle(150*s,50)DegreeCurve(20, 50*s, -1)t.circle(400*s,60)DegreeCurve(18, 50*s)t.fd(250*s)t.right(150)t.circle(-500*s,12)t.left(140)t.circle(550*s,110)t.left(27)t.circle(650*s,100)t.left(130)t.circle(-300*s,20)t.right(123)t.circle(220*s,57)t.end_fill()# 绘制花枝形状t.left(120)t.fd(280*s)t.left(115)t.circle(300*s,33)t.left(180)t.circle(-300*s,33)DegreeCurve(70, 225*s, -1)t.circle(350*s,104)t.left(90)t.circle(200*s,105)t.circle(-500*s,63)t.penup()t.goto(170*s,-30*s)t.pendown()t.left(160)DegreeCurve(20, 2500*s)DegreeCurve(220, 250*s, -1)# 绘制一个绿色叶子t.fillcolor('green')t.penup()t.goto(670*s,-180*s)t.pendown()t.right(140)t.begin_fill()t.circle(300*s,120)t.left(60)t.circle(300*s,120)t.end_fill()t.penup()t.goto(180*s,-550*s)t.pendown()t.right(85)t.circle(600*s,40)# 绘制另一个绿色叶子t.penup()t.goto(-150*s,-1000*s)t.pendown()t.begin_fill()t.rt(120)t.circle(300*s,115)t.left(75)t.circle(300*s,100)t.end_fill()t.penup()t.goto(430*s,-1070*s)t.pendown()t.right(30)t.circle(-600*s,35)t.done()

运行结果:

9.5.3 "玫瑰花绘制"举一反三

艺术之于编程,设计之于编程

艺术:思想优先,编程是手段设计:想法和编程同等重要工程:编程优先,思想次之

编程不重要,思想才重要!

认识自己:明确自己的目标,有自己的思想(想法) - 方式方法:编程只是手段,熟练之,未雨绸缪为思想服务为谁编程:将自身发展与祖国发展相结合,创造真正价值

后记

喜欢

全国计算机等级考试二级 Python科目

http://ncre.

全国计算机等级考试(简称NCRE)是教育部批准,由教育部考试中心主办,

面向社会,用于考查应试人员计算机应用知识与技能的全国性计算机水平考试体系。 二级Python语言科目在 9月 首考,异常火爆,快去报名试试吧!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。