探月工程 發表於 2019-9-3 09:58:00

【学习笔记】PYTHON语言程序设计(北理工 嵩天)

<h2>1 Python基本语法元素</h2><h3>1.1 程序设计基本方法</h3><p>计算机发展历史上最重要的预测法则&nbsp;&nbsp;&nbsp;&nbsp; 摩尔定律:单位面积集成电路上可容纳晶体管数量约2年翻倍 cpu/gpu、内存、硬盘、电子产品价格等都遵循此定律</p><p>50年来计算机是唯一一个指数发展的领域</p><p>源代码、目标代码(机器代码)</p><p>编译、解释</p><p>静态语言、脚本语言</p><p>静态语言编译器一次性生成目标代码,优化更冲份,程序运行速度更快</p><p>脚本语言 执行程序时需要源代码,维护更灵活</p><p><br></p><p>程序的基本设计方法IPO</p><p>I:input&nbsp; 文件输入、网络输入、控制台输入、交互界面输入、内部参数输入</p><p>P:process 处理</p><p>O:output 控制台输出、图形输出、文件输出、网络输出、操作系统内部输出</p><p>6个步骤:</p><p>-分析问题:分析问题的计算部分,想清楚</p><p>-划分边界:划分问题的功能边界,规划IPO</p><p>-设计算法:设计问题的求解算法,关注算法</p><p>-编程</p><p>-调试测试</p><p>-升级维护</p><p>3个精简步骤:确定IPO、编程、调试运行</p><p>计算思维(编程体现了一种抽象交互关系、自动化执行的思维模式)、逻辑思维、实证思维</p><h3>1.2 Python开发环境配置</h3><p>python 蟒蛇</p><p>psf 拥有者,开放、开源精神</p><p>Guido van Rossum创立</p><p>2002年 2.x</p><p>2008年 3.x</p><p>python3不兼容python2</p><p>交互式、文件式</p><p>linux自带python2和python3,无需安装,不过没有pip,要安装apt install python3-pip</p><h3>1.3 实例1:温度转换</h3><p>实例1:温度转换</p><p>需求:摄氏度与华氏度相互转换</p><div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:true;">#TempConvert.py
TempStr = input("请输入带有符号的温度值: ")
if TempStr[-1] in ['F', 'f']:
    C = (eval(TempStr) - 32)/1.8
    print("转换后的温度是{:.2f}C".format(C))
elif TempStr[-1] in ['C', 'c']:
    F = 1.8*eval(TempStr) + 32
    print("转换后的温度是{:.2f}F".format(F))
else:
    print("输入格式错误")
</pre>
</div>
<h3>1.4 Python程序语法元素分析
</h3><p>程序的格式框架:</p><p>代码高亮 是辅助</p><p>缩进是语法要求&nbsp; 一般4个空格或者1个tab&nbsp; 表达代码间包含和层次关系的唯一手段</p><p>注释:单行注释 #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 多行注释&nbsp; ”’ ”’</p><hr><p>命名:给变量关联标识符的过程</p><p>命名大小写敏感、首字符不能是数字、不与保留字相同</p><p>保留字:被编程语言内部定义并保留使用的标识符 也大小写敏感 33个</p><p><img width="933" height="517" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902091422826-100516259.png" border="0"></p><p><strong>数据类型</strong></p><p><strong>字符串</strong></p><p>用‘’或“”</p><p>正向递增序号、反向递减序号&nbsp; <strong>正向0开始编号</strong></p><p><strong>索引</strong>: 可以使用索引其中单个字符</p><p><strong>切片</strong>:可以使用返回其中一段子串,从第M到第<strong>N-1</strong>个字符<img width="977" height="512" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902091429023-349057149.png" border="0"></p><p><strong>数字</strong>类型:整数、浮点数</p><p><strong>列表</strong>:表示0到多个数据组成的有序序列,采用,分隔各元素,使用in判断一个元素是否在列表中</p><hr><p>=&nbsp;&nbsp; <strong>赋值</strong>主语句</p><p><strong>分支</strong>语句if elif else构成</p><p>eval <strong>评估函数</strong> 去除参数最外侧引号并执行余下语句的函数</p><p>垂直输出hello world</p><p>for i in “Hello World”:</p><p>&nbsp;&nbsp; print(i)</p><p>输出</p><p>x = input()</p><p>print(eval(x)**0,eval(x)**1,eval(x)**2,eval(x)**3,eval(x)**4,eval(x)**5)</p><h2>2. Python基本图形绘制</h2><h3>2.1 深入理解Python语言</h3><p>计算机演进过程:</p><p>1946-1981 计算机系统结构时代&nbsp; 计算能力问题&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1981年个人pc诞生&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p><p>1981-2008 网络和视窗时代&nbsp; 交互问题&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2008 Android诞生&nbsp;&nbsp; 标志pc转向移动&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p><p>2008-2016 复杂信息系统时代 数据问题&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2016年alpha go打败人类&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p><p>2017-&nbsp; 人工智能时代 人类的问题</p><p>新计算时代&nbsp; 过度到人工智能时代的中间时代</p><hr><p>编程语言的初心</p><p>不完全统计600多中语言&nbsp;&nbsp;&nbsp; 常用的也就那么20来种</p><p>python已经在tiobe排行超过C++跃居第三</p><p><img width="955" height="1029" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902091722191-1265299785.png" border="0"></p><p>Python语言是<strong>通用语言</strong>、脚本语言、开源语言、跨平台语言、多模型语言</p><p>–强制可读性</p><p>–较少的底层语法元素</p><p>–多种编程方式</p><p>–支持中文字符</p><p>–C代码量的10%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&nbsp;&nbsp; 语法简洁&nbsp;&nbsp;&nbsp; *10</strong></p><p>–13万第三方库&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>生态高产&nbsp;&nbsp;&nbsp; *10</strong></p><p>–快速增长的计算生态 每年2万</p><p>–避免重复造轮子</p><p>–开放共享</p><p>–跨操作系统平台</p><p><strong>人生苦短 我学Python</strong></p><p>&nbsp;&nbsp;&nbsp; –C/C++:C归C&nbsp; Python归Python</p><p>&nbsp;&nbsp;&nbsp; –Java:针对特定开发和岗位需求</p><p>&nbsp;&nbsp;&nbsp; –HTML/CSS/JS:不可替代的前端技术,全栈能力</p><p>&nbsp;&nbsp;&nbsp; -R/GO/Matlab等:特定领域</p><p><strong>Python是最高产的程序设计语言</strong></p><p>&nbsp;&nbsp;&nbsp; –掌握抽象并求解计算问题综合能力的语言</p><p>&nbsp;&nbsp;&nbsp; -了解产业界解决复杂计算问题方法的语言</p><p>&nbsp;&nbsp;&nbsp; -享受利用编程将创新变为实现乐趣的语言</p><p><strong>工具决定思维:关注工具变革的力量!</strong></p><p><img width="975" height="1064" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902091733384-1291927084.png" border="0"><strong>python具有最庞大的生态库,是唯一的超级语言,前进步伐不可阻挡</strong></p><h3>2.2 实例2:Python蟒蛇绘制</h3><p><img width="688" height="846" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902092320856-2080464801.png" border="0"></p><h3>2.3 模块1: turtle库的使用</h3><p><strong>turtle库基本介绍</strong></p><p>import 保留字 引入turtle绘图库 海龟绘图体系</p><p>turtle库是turtle绘图体系的Python实现&nbsp; 1969年诞生,主要用于程序设计入门 Python的标准库之一 入门级的图形绘制函数库</p><p>Python计算生态=标准库+第三方库</p><p>库library,包package,模块module ,统称模块</p><p>有一只海龟,其实在窗体正中心,在画布上游走,走过的轨迹绘制的图形,海龟由程序控制,可以变换颜色宽度</p><hr><p><strong>turtle绘图窗体布局</strong></p><p>turtle的一个画布空间 最小单位是像素</p><p>屏幕坐标系:屏幕左上角为0 0</p><p>turtle.setup(width,height,startx,starty)后两个可选 默认屏幕中央&nbsp; 并不是必须的&nbsp;&nbsp; 用来设置窗体大小和窗体左上角与屏幕左上角的相对位置</p><hr><p><strong>turtle空间坐标系</strong>:</p><p><strong>绝对坐标</strong>&nbsp; 海龟在屏幕中央 记为(0,0)坐标原点&nbsp;&nbsp; turtle.goto(x,y)</p><p><strong>海龟坐标&nbsp; 以海归的视角</strong>turtle.fd(d),turtle.bk(d),turtle.circle(r,angle) 左侧r为止为中心行走angle角度的弧线</p><hr><p><strong>turtle角度坐标体系</strong></p><p><strong>绝对角度</strong> 改变海龟前进方向 turtle.seth(angle)<img width="922" height="603" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902092330996-92400614.png" border="0"><strong>海龟角度</strong> turtle.left(angle),turtle.right(angle)</p><p><img width="907" height="617" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902092337022-1305694125.png" border="0"><strong>RGB色彩体系</strong> 0-255整数或 0-1 的小数</p><p><img width="973" height="961" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902092342834-365817868.png" border="0">默认采用小数制,可切换为整数制&nbsp; turtle.colormode(mode) mode为1.0或255</p><h3>2.4 turtle语法元素分析</h3><p><strong>库引用</strong></p><p>扩充Python程序功能的方式 使用import保留字完成,采用&lt;a&gt;.&lt;b&gt;()的编码风格</p><p>from turtle import*&nbsp;&nbsp;&nbsp; 缺点 函数重名&nbsp;&nbsp; 适用于短的程序</p><p>from turtle import函数名</p><p>可以as保留字起别名 import turtle as t&nbsp;&nbsp;&nbsp; –推荐使用</p><hr><p><strong>画笔控制函数</strong></p><p>画笔操作后一直有效,一般成对出现</p><p>-turtle.penup() 别名turtle.pu() 抬起画笔,海龟在飞行</p><p>-turtle.pendown() 别名turtle.pd() 落下画笔,海龟在爬行</p><p>画笔设置后一直有效,直到下次设置</p><p>-turtle.pensize(width) 别名turtle.width(width)&nbsp; 画笔宽度,海龟腰围</p><p>-turtle.pencolor(color) color为颜色字符串或rgb值 画笔颜色,海龟在涂装</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -颜色字符串 turtle.pencolor(“purple”)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -rgb小数&nbsp; turtle.pencolor(0.63,0.13,0.94)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -rgb元组值&nbsp; turtle.pencolor((0.63,0.13,0.94))</p><hr><p><strong>运动控制函数</strong></p><p>控制海龟行进:走直线&amp;走曲线</p><p>-turtle.forward(d) 别名 turtle.fd(d)&nbsp; 向前行进,海龟走直线&nbsp;&nbsp; d可以为负数</p><p>-turtle.circle(r,extent=none) 根据半径r绘制extent角度的弧线 r默认圆心在海龟左侧r距离的位置&nbsp; -extent绘制角度,默认是360度</p><hr><p><strong>方向控制函数</strong></p><p>turtle.setheading() 别名turtle.seth() 控制海龟面对方向:绝对角度 海龟角度</p><p>turtle.left() turtle.right()</p><hr><p><strong>循环语句</strong></p><p>for in 保留字</p><p>range() 产生循环计算序列 range(N) range(M,N)&nbsp;&nbsp;&nbsp; <strong>0到N-1 M到N-1</strong></p><p>turtle.done() 运行结束 不退出&nbsp; 需要手工退出&nbsp; 去掉就自动退出了</p><h2>3. 基本数据类型</h2><h3>3.1 数字类型及其操作</h3><p><strong>整数类型</strong>:可正可负 取值无限 pow(x,y) x的y次方</p><p>4种进制表示:10进制、二进制0b或0B开头 0b010、8进制0o或0O、16进制0x或0X</p><hr><p><strong>浮点型</strong> 10的308次方 精度达到:10的-16次方小数 即53位二进制&nbsp;&nbsp; 与数学中实数一致</p><p><strong>不确定尾数</strong> (浮点数运算)不是bug&nbsp; 53位二进制表示浮点数的小数部分 约10的-16次方&nbsp; 计算机中的二进制和十进制不完全对等</p><p><strong>二进制表示小数,可以无限接近,但不完全相同</strong></p><p>0.1+0.2 结果接近0.3</p><p>0.1+0.2 == 0.3&nbsp; false&nbsp;&nbsp;&nbsp; <strong>用round(x,d)处理不确定尾数</strong>&nbsp;&nbsp; 不确定位数一般发生在10的-16次方左右</p><p><strong>科学计数法</strong>&nbsp; e或E作为幂的符号,10为基数&nbsp; &lt;a&gt;e&lt;b&gt;&nbsp; 4.3e-3</p><hr><p><strong>复数类型</strong> z.real z.imag&nbsp; 获得实部和虚部</p><hr><p><strong>数值运算操作符</strong></p><p>x+y x-y x*y x/y x//y&nbsp; +x -y x%y x**y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ps:x/y 是浮点数&nbsp; 别的语言中不是这样</p><p>二元操作符有对应的增强赋值操作符</p><p><strong>x op =y</strong>&nbsp;&nbsp; x+=y x-=y x*=y x/=y x//=y x%=y x**=y</p><p>类型间可以混合运算 结果生成为“最宽”的类型 隐式转换&nbsp; 整数-&gt;浮点数-&gt;复数&nbsp; 如123+4.0=127.0</p><p><strong>数值运算函数</strong></p><p>abs(x) 绝对值</p><p>divmod(x,y) 商余&nbsp;&nbsp;&nbsp; divmod(10,3)&nbsp; 结果是二元数(3,1)</p><p>pow(x,y[,z]) 幂余</p><p>round(x[,d]) 四舍五入</p><p>max(x1,x2,..)</p><p>min(x1,x2,..)</p><p>int(x) 显示类型转换,&nbsp; 变为整数,舍弃小数</p><p>float(x)&nbsp; 转浮点数</p><p>complex(x)&nbsp; 转复数</p><h3>3.2 实例3:天天向上的力量</h3><p>问题分析:<strong>持续的价值</strong>&nbsp;&nbsp;&nbsp; 一年365天每天进步1%,累计进步多少?相反,每天退步1%,累计剩下多少?如果三天打渔二天晒网呢?</p><p>每天进步或退步0.1%</p><p><img width="864" height="150" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902093745037-382907292.png" border="0">如果是0.5% 1%呢</p><p><img width="888" height="347" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902093752319-576964742.png" border="0"></p><p>如果是工作日的力量?工作日进步1%,休息日退步1%<img width="663" height="251" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902093800234-1093298676.png" border="0">工作日的努力要达到多少才能和每天努力1%一样?<img width="763" height="339" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902093807211-205358511.png" border="0"></p><h3>3.3 字符串类型及操作</h3><p>四种字符串表示方法:</p><p>由一对单引号或双引号表示单行字符串</p><p>由一对三引号或三双引号表示多行字符串&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p><p>三单引号表示字符串,程序啥都不执行,相当于注释,python实际没有真正提供多行注释</p><hr><p>根据步长对字符串切片 M和N均可以缺失,表示至开头或至结尾</p><p>[::-1]倒序<img width="949" height="542" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902093815578-1700992506.png" border="0">转义符\&nbsp; \b 回退&nbsp; \n 换行&nbsp; \r 回车光标移动到行首</p><p><strong>字符串操作符</strong></p><p>x+y 连接两个字符串</p><p>n*x或x*n 复制n次字符串x</p><p>x in s</p><hr><p><strong>字符串处理函数</strong></p><p>len(x) 字符串长度&nbsp;&nbsp;&nbsp; 中英文长度都是1</p><p>str(x) 强制类型转换为字符串&nbsp; <strong>和eval相反操作</strong></p><p>hex(x)&nbsp; 整数x转变为8进制形式</p><p>oct(x) 整数x转变为16进制形式</p><p>chr(x) 将unicode编码返回其字符形式</p><p>ord(x)&nbsp; 上面的反操作</p><p>unicode编码 统一字符编码 从0到1114111(0x10FFFF) Python字符串每个字符都是unicode编码<img width="964" height="436" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902093821623-411392918.png" border="0"></p><p><strong>字符串处理方法</strong></p><p>&lt;a&gt;.&lt;b&gt;&nbsp; 形式 面向对象的术语 表示对象的动作</p><p><strong>8个字符串处理方法</strong></p><p>.lower() .upper()&nbsp;&nbsp; 大小写转换</p><p>.split(sep=None)&nbsp; 字符串分割,返回一个列表&nbsp;&nbsp;&nbsp; 例:”a,b,c”.split(‘,’)结果是[‘a’, ‘b’, ‘c’]</p><p>.count(sub)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字符串sub在其中出现次数</p><p>.replace(old,new)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字符串替换</p><p>.center(width[,fillchar])&nbsp;&nbsp;&nbsp;&nbsp; 字符串格式处理,字符串居中&nbsp; 例: ‘python’.center(30,’=’)&nbsp; 结果’============python============’</p><p>.strip(chars)&nbsp;&nbsp;&nbsp;&nbsp; 去除字符换两边字符&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如:’= python= ‘.strip(‘ =np’)结果’ytho’</p><p>.join(iter) 填充字符&nbsp;&nbsp;&nbsp; 如:’,’.join(‘12345′)结果’1,2,3,4,5’</p><hr><p><strong>字符串类型的格式化</strong></p><p>格式化是对字符串进行格式化表达的方式</p><p>.<strong>format方法</strong>&nbsp;&nbsp;&nbsp; 用法:&lt;模板字符串&gt;.format(&lt;逗号分隔的参数&gt;)</p><p><strong>槽</strong> 相当于占位信息符,只在字符串中有用<img width="975" height="1182" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902093830339-418472968.png" border="0"></p><p>分为2组</p><p>前三个参数是一组&nbsp;&nbsp; 默认填充空格左对齐</p><p>如:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; “{:=^20}”.format(“python”)&nbsp;&nbsp;&nbsp;&nbsp; 结果:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ‘=======python=======’</p><p>如:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; “{0:,.2f}”.format(12345.6789)&nbsp;&nbsp; 结果&nbsp;&nbsp;&nbsp; ‘12,345.68’</p><p>如:”{0:b} {0:c} {0:d} {0:o} {0:x} {0:X}”.format(425)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 结果’110101001 Ʃ 425 651 1a9 1A9′</p><p>如: “{0:e} {0:E}{0:f} {0:%}”.format(3.14)&nbsp; 结果&nbsp;&nbsp;&nbsp;&nbsp; ‘3.140000e+00 3.140000E+003.140000 314.000000%’</p><h3>3.4 模块2:time库的使用</h3><p>time库是Python中处理时间的标准库</p><p><strong>时间获取</strong></p><p>time()&nbsp; 获取当前时间戳,即计算机系统内部时间值,浮点数&nbsp; 1970年1月1日0点0分开始到当前系统以秒为单位的浮点数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如:1537763974.4934046</p><p>ctime() 获取当前时间,返回字符串,人类易读&nbsp; 如:’Mon Sep 24 12:41:59 2018′</p><p>gmtime() 获取当前时间,struct_time格式,计算机易处理的格式 </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如:time.struct_time(tm_year=2018, tm_mon=9, tm_mday=24, tm_hour=4, tm_min=42, tm_sec=52, tm_wday=0, tm_yday=267, tm_isdst=0)</p><hr><p><strong>时间格式化 </strong></p><p><strong>strftime()<img width="956" height="297" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902094030696-1483057148.png" border="0"><strong>格式化字符串<img width="963" height="718" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902094037565-1668937032.png" border="0"><strong>striptime()<img width="956" height="385" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902094045483-1536496374.png" border="0"></strong></strong></strong></p><p><strong>程序计时 </strong></p><p><strong>perf_counter()<img width="957" height="407" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902094053000-483182448.png" border="0"><strong>sleep()<img width="956" height="314" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902094059250-2135081428.png" border="0"></strong></strong></p><h3>3.5 实例4:文本进度条</h3><p>问题分析:采用字符串方式打印可以动态变化的文本进度条&nbsp; 能在一行中逐渐变化</p><p>刷新的本质:用后打印的字符覆盖之前的字符</p><p>print() 默认加换行&nbsp; print( ,end=””)不换行&nbsp;&nbsp; \r退格到行首</p><p>idle不是主要的运行环境 所以\r功能在idle屏蔽了 用shell执<img width="954" height="561" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902094524875-1757839492.png" border="0"></p><p>文本进度条 简单的开始</p><p><img width="718" height="586" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902094531188-1921816425.png" border="0"></p><p>文本进度条 单行动态刷新<img width="623" height="175" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902094537496-151010086.png" border="0">文本进度条 实例完整效果<img width="1023" height="415" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902094544099-679335779.png" border="0"></p><h2>4.程序的控制结构</h2><h3>4.1 分支结构</h3><p><strong>单分支结构</strong></p><p>if &lt;条件&gt;:</p><p>&nbsp;&nbsp;&nbsp; &lt;程序1&gt;</p><hr><p><strong>二分支结构</strong></p><p>if &lt;条件1&gt;:</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;程序1&gt;</p><p>else:</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;程序2&gt;</p><hr><p><strong>紧凑形式</strong>:适用于简单表达式的二分支结构</p><p><strong>&lt;表达式1&gt; if &lt;条件&gt; else &lt;表达式2&gt;</strong></p><p>如:</p><p>guess = eval(input())</p><p>print(“猜{}了”.format(“对”if guess == 99 else ”错”))</p><hr><p><strong>多分支结构</strong></p><p>if &lt;条件1&gt;:</p><p>&nbsp;&nbsp;&nbsp; &lt;程序2&gt;</p><p>elif &lt;条件2&gt;:</p><p>&nbsp;&nbsp;&nbsp; &lt;程序3</p><p>…</p><p>else:</p><p>&nbsp;&nbsp;&nbsp; &lt;程序n&gt;</p><hr><p>条件判断&gt;&nbsp; &gt;=&nbsp;&nbsp; &lt;&nbsp;&nbsp; &lt;=&nbsp;&nbsp;&nbsp; ==&nbsp;&nbsp; !=</p><p>条件组合x and y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x or y&nbsp;&nbsp;&nbsp;&nbsp; not x</p><hr><p><strong>异常处理</strong></p><p>try:</p><p>&nbsp;&nbsp;&nbsp; 程序1</p><p>except :</p><p>&nbsp;&nbsp;&nbsp; 程序2</p><p>try:</p><p>&nbsp;&nbsp;&nbsp; 程序1</p><p>except:</p><p>&nbsp;&nbsp;&nbsp; 程序2</p><p>else:</p><p>&nbsp;&nbsp;&nbsp; 程序3</p><p>finally:</p><p>&nbsp;&nbsp; 程序4</p><h3>4.2 实例5:身体质量指数BMI</h3><p>问题分析:BMI是身体肥胖程度的刻画(BODY MASS INDEX)&nbsp; BMI=体重(kg)/身高的平方(m),接收用户信息判断身体肥胖程度<img width="959" height="466" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902095036019-364925144.png" border="0"><img width="979" height="569" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902095042307-970110034.png" border="0"></p><h3>4.3 循环结构</h3><p><strong>for 遍历循环</strong></p><p>for &lt;循环变量&gt; in &lt;遍历结构&gt;:</p><p>&nbsp;&nbsp;&nbsp; &lt;语句块&gt;</p><p><strong>记数循环</strong></p><p>for I in range(5):</p><p>&nbsp;&nbsp;&nbsp; print(i)</p><p>for I in range(m:n:k):</p><p>&nbsp;&nbsp;&nbsp; print(i)</p><p><strong>字符串遍历循环</strong></p><p>for c in s:</p><p>&nbsp;&nbsp;&nbsp; &lt;语句块&gt;</p><p>for c in “Python123”:<br>&nbsp;&nbsp;&nbsp;&nbsp; print(c)</p><p><strong>列表遍历循环ls是列表</strong></p><p>for item in ls:</p><p>&nbsp;&nbsp;&nbsp; &lt;语句块&gt;</p><p>for item in :<br>&nbsp;&nbsp;&nbsp;&nbsp; print(item,end=’,’)</p><p><strong>文件遍历循环&nbsp; fi是文件标识符</strong></p><p>for line in fi:</p><p>&nbsp;&nbsp; &lt;语句块&gt;</p><hr><p><strong>while 无限循环</strong></p><p>while &lt;条件&gt;:</p><p>&nbsp;&nbsp; &lt;语句&gt;</p><hr><p><strong>循环控制保留字break&nbsp; continue</strong></p><p><strong>循环扩展:两种循环后面都可以加else分支&nbsp; else为没有被break退出是执行的,作为正常运行的奖励</strong></p><h5>4.4 模块3:random库使用</h5><p>random库是使用随机数的python标准库</p><p>计算机没法产生真正的随机数,但是可以使用<strong>梅森旋转算法</strong>产生伪随机数</p><p>使用 import random</p><hr><p><strong>random库包括2类函数,常用共8个</strong></p><p><strong>基本随机数函数</strong>:seed(),random()</p><p><strong>括展随机数函数</strong>:randint(),getrandbits(),uniform(),randrange(),choice(),shuffle()</p><p><strong>随机数种子</strong></p><p>seed(a=None)&nbsp;&nbsp;&nbsp; 初始化给定的随机数种子,默认为系统当前时间,例:random.seed(10) #产生种子10对应的序列 0.5714025946899135 0.4288890546751146&nbsp; ..</p><p>random()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 生成一个之间的整数,例:random.randint(10,100)</p><p>randrange(m,n[,k])&nbsp;&nbsp;&nbsp; 生成一个之间的随机小数</p><p>choice(seq)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从序列中随机选择一个元素,例:random.choice()</p><p>shuffle(seq)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将序列中元素随机排序,返回打乱后的序列,例:s=;random.shuffle(s);print(s)</p><h3>4.4 实例6:圆周率计算</h3><p><img width="880" height="660" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902095437014-225539789.png" border="0"></p><p><strong>蒙特卡罗方法</strong>&nbsp;&nbsp;&nbsp;&nbsp; 工程方法</p><p>数学思维</p><p><strong>计算思维</strong></p><p><strong>time库perf_counter来关注程序性能</strong></p><p><strong>据统计,程序80%的时间消耗在不到10%的代码上&nbsp;&nbsp; 有点儿类似28法则</strong></p><p><strong>关注循环</strong></p><h2>5.函数和代码复用</h2><h3>5.1 函数的定义与使用</h3><p><strong>函数定义</strong></p><p>函数是一段具有特定功能可复用的语句</p><p><strong>df &lt;函数名&gt;(参数):</strong></p><p><strong>&nbsp;&nbsp;&nbsp; &lt;函数体&gt;</strong></p><p><strong>&nbsp;&nbsp;&nbsp; return &lt;返回值&gt;</strong></p><p>其中参数可以是0个到多个,是占位符</p><p>函数不经过调用是不会执行的</p><p>函数就是IPO的实现</p><p>函数也是一段完整代码的封装</p><hr><p><strong>函数的参数传递</strong></p><p><strong>可选参数传递</strong>:可以为参数指定默认值,变为可选参数,可选参数要放在非可选参数之后<img width="806" height="720" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902095443522-1287222842.png" border="0"><strong>可变参数传递</strong>:不确定参数有多少个<img width="955" height="520" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902095449420-2009057374.png" border="0"><img width="960" height="389" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902095458980-1122275677.png" border="0"></p><p><strong>参数传递的两个方式</strong></p><p><strong>默认是按照位置,可以按照名称方式传递<img width="959" height="328" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902095508199-1675138566.png" border="0"></strong></p><p><strong>函数的返回值</strong></p><p>return可以返回0个或多个结果</p><p>函数可以有返回值也可以没有</p><p>可以有return 也可以没有</p><p><strong>返回多个值的时候是返回元组类型 用() 元素用逗号分隔</strong></p><hr><p><strong>局部变量与全局变量</strong></p><p>函数外边的是全局变量,里面是局部变量</p><p>局部变量是函数内部的占位符,可能与全局变量重名单不相同</p><p>函数运行结束后局部变量被释放</p><p><strong>规则1:局部变量与全局变量是不同变量</strong></p><p>可以使用global保留字在函数内部使用全局变量</p><p><img width="951" height="526" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902095515657-143680059.png" border="0"><strong>规则2:局部变量如果是组合数据类型且未被创建,等同于全局变量&nbsp;&nbsp;&nbsp; 组合数据类型实际是指针的原因<img width="962" height="634" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902095523052-1026887508.png" border="0"><img width="969" height="502" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902095530490-294855711.png" border="0"></strong></p><p><strong>lambda函数</strong></p><p>lambda函数返回函数名作为结果</p><p>lambda函数是一种匿名函数,没有名字的函数</p><p>lambda函数用于定义一种简单的能够在一行内表示的函数</p><p>是一种函数的紧凑表达形式</p><p><strong>&lt;函数名&gt; = lambda &lt;参数&gt;:&lt;表达式&gt;</strong></p><p>f = lambda x,y : x + y</p><p>f(10,15)</p><p>谨慎使用lambda函数</p><p>用于特定的方法的参数</p><p>一般就算是1行代码,也建议用def方式定义</p><h3>5.2 实例7:七段数码管绘制</h3><p>问题分析:用turtle绘制数码管样式的时间<img width="1700" height="1174" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902100106810-777147029.png" border="0"></p><h3>5.3 代码复用与函数递归</h3><p><strong>代码复用</strong></p><p>代码抽象化:使用函数等方法对代码赋予更高级别的定义</p><p><strong>函数</strong>和<strong>对象</strong>是代码复用的2中主要形式</p><p>函数是在代码层面建立了初步抽象</p><p>对象有属性和方法,是<strong>更高级别的抽象</strong></p><p><strong>封装</strong></p><hr><p><strong>模块化设计</strong></p><p>分而治之:</p><p>通过函数或对象封装将程序划分为模块与模块间的表达</p><p>主程序、子程序与子程序之间的关系</p><p>一般将子程序看作模块,主程序看作模块与模块间的关系</p><p>是一种分而治之、分层抽象、体系化的设计思想</p><p>紧耦合:两个部分之间交流很多,无法独立存在</p><p>松耦合:两个部分之间交流很少,可以独立存在,有各自清晰简单的接口</p><p><strong>模块化设计基本思路和原则:模块内部紧耦合,模块之间松耦合</strong></p><hr><p><strong>函数递归</strong>:函数定义中调用自身的方式</p><p><strong>两个关键特征</strong></p><p><strong>链条:</strong>计算过程存在递归链条</p><p><strong>基例:</strong>存在一个或者多个不需要再次递归的基例&nbsp; 递归的最末段</p><p>类似数学归纳法,先证明第一个取值命题成立,然后第n个取值命题成立,第n+1取值命题也成立,那么命题成立</p><p>递归可以理解为数学归纳法思维在编程中的体现</p><hr><p><strong>函数递归的调用<img width="961" height="706" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902100113109-2121274966.png" border="0"></strong></p><p>函数+分支语句&nbsp;&nbsp; :基例和链条分别编写代码</p><p>3个小栗子<img width="957" height="371" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902100119460-1237212446.png" border="0"><img width="963" height="474" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902100125992-1532750070.png" border="0"><img width="952" height="929" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902100131618-278267731.png" border="0"></p><h3>5.4 模块4:Pyinstaller库的使用</h3><p>是第三方库 需要安装</p><p>pip工具</p><p>shell中使用使用&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pyinstaller –F &lt;文件名.py&gt;<img width="952" height="993" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902100140325-1428216499.png" border="0"></p><h3>5.5 实例8:科赫雪花小包裹</h3><p><img width="951" height="479" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902100146236-691075796.png" border="0">分形几何</p><p><img width="1228" height="627" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902100406591-184003621.png" border="0"></p><h2>6. 组合数据类型</h2><h3>6.1 集合类型及操作</h3><p>集合是多个元素的无序组合,<strong>每个元素唯一,不存在相同元素</strong></p><p><strong>集合元素不可更改</strong>,不能是可变数据类型,比如列表类型就不能作为元素,整数浮点数复数字符串元组类型等都是不可变数据类型</p><p>用{}表示,元素间用逗号分隔</p><p><strong>建立集合用{}或者set()</strong></p><p>例如:B = set(“pypy123”) 结果{‘1’,’2’,’3’,’p’,’y’}</p><p><strong>建立空集合必须用set()</strong></p><hr><p><strong>6个集合操作符</strong></p><p>S | T&nbsp; 并</p><p>S – T&nbsp; 差</p><p>S &amp; T 交</p><p>S ^ T&nbsp; 补</p><p>S &lt;= T、S &lt; T&nbsp; 包含与子集关系</p><p>S &gt;= T、S &gt; T</p><p><strong>增强操作符</strong></p><p>S |= T</p><p>S –= T</p><p>S &amp;= T</p><p>S ^= T</p><hr><p><strong>10个集合处理方法</strong></p><p>S.add(x)&nbsp; 如果x不在S中,将x元素加入S集合</p><p>S.discard(x) 移除S中元素x,如果x不在集合S中,不报错</p><p>S.remove(x) 移除S中元素x,如果x不在S中,产生KeyError异常</p><p>S.clear() 移除S中所有元素</p><p>S.pop() 随机返回S的一个元素,更新S,若S为空产生KeyError异常</p><p>S.copy()&nbsp; 返回集合S的一个副本</p><p>len(S) 返回个数</p><p>x in S 判断S中是否有元素x</p><p>x not in S 同上相反</p><p>set(x) 将其他类型变量x转变为集合类型</p><hr><p><strong>集合类型应用场景</strong></p><p>包含关系的比较</p><p>数据去重</p><p><img width="956" height="391" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902100812576-302291802.png" border="0"></p><h3>6.2 序列类型及操作</h3><p><strong>序列是有先后顺序的一组元素</strong></p><p>序列是一维元素向量,元素类型可以不同,类似C语言中的一维数组</p><p>元素间由序号引导,通过下标访问序列的特定元素</p><p><strong>序列是一个基类类型</strong></p><p>一般不直接用序列类型而是使用其衍生类型,比如<strong>字符串、元组、列表<img width="950" height="445" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902100818616-60796321.png" border="0"><strong>序列处理函数与方法<img width="957" height="526" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902100825557-2107257861.png" border="0"><img width="955" height="596" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902100831108-204717907.png" border="0"></strong></strong></p><p>元组类型</p><p>元组是一种序列类型,一旦创建就不能被修改</p><p>使用()或者tuple()创建,元素间用逗号分隔</p><p><strong>可以使用或不适用小括号</strong>,比如函数返回多个返回值就是使用没有括号的元组类型,python内部认为是一个值,是一个元组<img width="955" height="366" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902100836520-82224079.png" border="0"></p><p>元组类型继承了序列的所有通用操作</p><p>元组类型因为一旦定义不能修改,所以没有特殊操作</p><hr><p><strong>列表类型及操作</strong></p><p>列表是序列类型的扩展,十分常用</p><p>列表是一种序列类型,创建后可以随意修改,长度无限制,元素类型可不同<img width="967" height="296" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902100843058-1937142157.png" border="0">列表本质是指针,如果通过赋值语句给另外一个变量,那么实际并没有创建一个新列表,可以类似linux的硬链接<strong>,[]或者函数list()才是真正创建一个列表,赋值仅仅传递引用<img width="964" height="518" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902100850176-2049282090.png" border="0">一些例子<img width="955" height="542" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902101027357-2019057321.png" border="0"><img width="952" height="512" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902101033627-173083809.png" border="0">一些例子<img width="940" height="478" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902101046113-1012032098.png" border="0"><img width="959" height="923" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902101052648-1619292246.png" border="0"></strong></p><p><strong>序列类型应用场景</strong></p><p>包含元组列表</p><p>元组用于元素不改变的场景,更多用于固定场景 比如函数返回值</p><p>列表则更加灵活,是常用的序列类型</p><p>最主要作用:表示一组有序数据并进而操作它们</p><p>元素遍历 for item in lt</p><p>数据保护 利用元组不可修改的特性<img width="952" height="439" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902101059297-336430927.png" border="0"></p><h3>6.3 实例9:基本统计值计算</h3><p>问题分析:给出一组数据,给出概要理解,比如 求和、平均值、方差、中位数…</p><p>总个数:len()</p><p>求和:for … in</p><p>平均值:上2个除</p><p>方差:各数据与平均值的平方的和的平均数</p><p>中位数:排序,取中间的或者中间2个数平均数<img width="994" height="1163" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902101355644-1059590373.png" border="0"></p><h3>6.4 字典类型及操作</h3><p>字典类型的定义</p><p><strong>映射 是一种键(索引)和值(数据)的对应</strong></p><p>用{}或者dict()创建字典,键值对用:表示&nbsp;&nbsp;&nbsp;&nbsp; {key:value,key2:value2…}</p><p>type()可以检测变量的类型</p><p>{}可以用来声明空字典,这就是集合类型中定义空集合不能用{}的原因<img width="959" height="870" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902101402907-374468756.png" border="0">一些例子<img width="941" height="418" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902101409058-402601540.png" border="0"></p><h3>6.5 模块5:jieba库的使用</h3><p>优秀的中文分词第三方库</p><p>由于中文是连续书写的 需要通过特定手段获得单个词语</p><p>jieba库提供3种分词模式,最简单只需要掌握一个函数</p><p>通过中文词库方式识别确定汉字之间关联概率 概率大的组成词组,形成分词效果</p><p>除了分词,用户也可以添加自定义的词组</p><hr><p>三种模式</p><p><strong>精确模式</strong>:把文本精确的切分开,不存在冗余单词&nbsp; 最常用的分词模式</p><p>全模式:把文本中所有可能的词语都扫描出来,存在冗余</p><p>搜索引擎模式:更加智能,在精确模式的基础上,对长词再次切分,存在冗余,在某些特定场景下使用<img width="960" height="873" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902101537705-1844649811.png" border="0"></p><h3>6.6 实例10:文本词频统计</h3><p>问题分析:一篇文章,出现了哪些词?哪些词最多?</p><p>中英文各一个程序:分别是哈姆雷特和三国演义</p><p><img width="887" height="704" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902102718261-1780540887.png" border="0"><img width="910" height="975" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190902102729137-1942605545.png" border="0"></p><h2>7. 文件和数据格式化</h2><h3>7.1 文件的使用</h3><p>文件的类型</p><p>文本文件、二进制文件&nbsp;&nbsp;&nbsp;&nbsp; 只是展示方式,本质上都是二进制数据</p><p>文本文件:由<strong>单一特定编码</strong>组成的文件,如utf-8编码&nbsp;&nbsp; 由于存在编码,文本文件也被看为一个长字符串</p><p>二级制文件:数据间没有统一字符编码,01组成,比如png avi等文件</p><hr><p><strong>文件的打开和关闭</strong></p><p>打开-&gt;操作-&gt;关闭&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件存储状态和占用状态转换<img width="953" height="460" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903084607979-331594239.png" border="0"></p><p>文件的打开</p><p><strong>&lt;变量名&gt; = open(&lt;文件名&gt;,&lt;打开模式&gt;)</strong></p><p>文件句柄</p><p>文件路径和名称,使用相对路径或者绝对路径,同一个路径的话就直接文件名,斜杠\是转移字符使用反斜杠/替换,或者\\</p><p>打开模式<img width="952" height="879" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903084614719-1824506307.png" border="0"></p><p>&lt;变量名&gt;.close&nbsp;&nbsp; 关闭文件</p><p>当程序退出的时候,python也会自动关闭文件</p><hr><p><strong>文件内容的读取</strong></p><p>&lt;f&gt;.read(size=-1)&nbsp;&nbsp; 读入全部内容,如果给出参数,读入前size长度</p><p>&lt;f&gt;.readline(size=-1) 读入一行,如果给了size,读入该行前size长度</p><p>&lt;f&gt;.readlines(hint=-1)&nbsp;&nbsp; 读入文件所有行,以每行为元素形成列表,hint参数可选,读入前hint行</p><p>遍历全文本<img width="957" height="1132" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903084620487-100907510.png" border="0"><strong>文件的逐行处理<img width="965" height="1136" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903084626947-986343923.png" border="0"></strong></p><p><strong>文件写入</strong></p><p>&lt;f&gt;.write(s)&nbsp;&nbsp; 向文件写入一个字符串或字节流&nbsp;&nbsp; 如:f.write(“abc”)</p><p>&lt;f&gt;.writelines(lines)&nbsp;&nbsp; 将一个元素全为字符串的列表写入文件&nbsp;&nbsp; 如:ls=[‘a’,’b’,’c’],f.writelines(ls)</p><p>&lt;f&gt;.seek(offset) 改变当前文件操作指针的位置,offset含义如下:0文件开头,1-当前位置,2-文件结尾</p><p>例子:<img width="671" height="450" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903084633409-1245160051.png" border="0"></p><h3>7.2 实例11:自动轨迹绘制</h3><p>问题分析:根据脚本来绘制图形&nbsp; 不是写代码而是写数据绘制轨迹<img width="1597" height="634" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903085038553-401018905.png" border="0"><img width="958" height="536" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903085043913-687259614.png" border="0"></p><p><strong>自动化思维</strong></p><p>将数据和功能分离开来</p><p>数据驱动</p><p><strong>接口化设计</strong></p><p><strong>可以扩展</strong></p><p><strong> </strong>扩展接口设计,增加更多控制接口</p><p>&nbsp; 扩展功能设计,增加弧形等更多功能</p><p>&nbsp; 扩展应用需求,发展自动轨迹绘制到动画绘制</p><h3>7.3 一维数据的格式化</h3><p>一维数据:由对等关系的有序或无序数据构成,采用线性方式组织,对应列表、集合、数组等概念</p><p>二维数据:由多个一维数据组成,是一维数据的组合形式</p><p>多维数据:是一维或二维数据在新唯独上扩展形成,比如中国大学排行榜加入时间维度</p><p>高维数据:仅利用最基本的二元关系展示数据间的复杂结构,比如字典类型中的key-value形式</p><hr><p>操作周期<img width="952" height="537" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903085050068-1984605920.png" border="0"></p><p>一维数据的表示</p><p>如果数据间有序,使用列表类型</p><p>如果数据间无序,使用集合类型</p><hr><p>一维数据的存储<img width="950" height="639" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903085055431-1219934015.png" border="0"><img width="952" height="974" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903085102275-1768480311.png" border="0"><strong>一维数据的处理<img width="955" height="471" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903085617707-284776793.png" border="0">类似于一个驱动<img width="940" height="509" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903085624487-79994547.png" border="0"><img width="963" height="572" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903085632221-1660902690.png" border="0"><img width="952" height="1161" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903085638425-34152610.png" border="0"></strong></p><h3>7.4 二维数据的格式化和处理</h3><p>二维列表</p><p>两层for循环遍历二维列表</p><p>csv:comma-separated values&nbsp; 逗号分隔&nbsp; 国际通用&nbsp;&nbsp; 一般.csv为扩展名</p><p>每行一个一维数据,无空行</p><p>一般的软件都能生成csv格式文件<img width="945" height="484" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903090417555-954033554.png" border="0"></p><p>如果每个元素缺失,逗号要保留</p><p>表头可以作为数据存储,也可以令行存储</p><p>如果数据中包含逗号,不同的软件有不同的约定,比如转义符或者其他方式</p><p>按行存或者按列存都行,一般索引习惯 ls 先行后列,按行存</p><hr><p>二维数据的处理</p><p>读入处理<img width="962" height="1141" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903090424741-1910809544.png" border="0"><img width="946" height="575" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903090551402-403013246.png" border="0"></p><h3>7.5 模块6:wordcloud库的使用</h3><p>词云展示的第三方库</p><p>wordcloud库把词云当作一个WordCloud对象</p><p>wordcloud.WordCloud()代表一个文本对应的词云</p><p>可以根据文本中词语出现的频率等参数绘制词云</p><p>绘制词云的形状、尺寸、颜色都可以设定</p><p><strong>w = wordcloud.WordCloud()</strong></p><p><strong>以WordCloud对象为基础</strong></p><p><strong>配置参数、加载文本、输出文件</strong></p><p>常规方法</p><p><strong>w.generate(txt)</strong>&nbsp; 向WordCloud对象w中加载文本txt 如:w.generate(“Python and WordCloud”)</p><p><strong>w.to_file(filename)</strong> 将词云输出为图像文件,.png或.jpg格式 如:w.to_file(“output.png”)</p><p>绘制词云的步骤:</p><p>setp1:配置对象参数</p><p>setp2:加载词云文本</p><p>step3:输出词云文件<img width="940" height="215" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903090708466-504714371.png" border="0"><img width="708" height="585" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903090714277-1974828153.png" border="0"></p><p>生成默认400*200的图片</p><p>wordcloud干啥了:</p><p>a.分隔:以空格为分隔单词</p><p>b.统计:单词出现次数并过滤</p><p>c.字体:根据统计配置字号</p><p>d.布局:颜色环境尺寸</p><p>对象参数</p><p>width 默认400</p><p>height 默认200</p><p>min_font_size 最小字号 默认4号</p><p>max_font_size 最大字号 根据高度自动调节</p><p>font_step 默认1,字体步进间隔</p><p>font_path 字体路径,默认None,如:w=wordcloud.WordCloud(font_path=”msyh.ttc”)</p><p>max_words 指定词云显示的最大单词数量,默认200&nbsp;&nbsp; 比如词云显示的不那么有力,可以修改这个</p><p>stop_words 指定排除单词 如:w=wordcloud.WordCloud(stop_words={“Python”})</p><p>background_color&nbsp; 指定背景色&nbsp; 默认黑色</p><p>默认显示的矩形效果,使用mask参数可以改变<img width="947" height="224" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903090719745-1587884651.png" border="0"></p><p>中文的话需要先用jieba库分词,中文不是空格分隔的</p><h5>7.6 实例12:政府工作报告词云</h5><p>常规矩形词云<img width="2042" height="683" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903091744331-1361641905.png" border="0">不规则词云<img width="2078" height="686" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903091839058-1272139405.png" border="0"></p><h2>8. 程序设计方法学</h2><h3>8.1 实例13:体育竞技分析<img width="959" height="1035" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903092108569-1348056004.png" border="0"><img width="940" height="346" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903092116608-899331246.png" border="0"></h3><p><strong>自顶向下(设计)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 分而治之</strong></p><p><strong>将一个总问题表达为若干个小问题组成的形式</strong></p><p>使用相同的方法进一步分解小问题</p><p>解决复杂问题的有效设计方法</p><p><strong>自底向上(执行)&nbsp;&nbsp;&nbsp;&nbsp; 模块化集成</strong></p><p><strong>逐步组建复杂系统的有效测试方法</strong></p><p>分单元测试,逐步组装<img width="954" height="931" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903092410352-17023592.png" border="0"><img width="930" height="1165" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903092421200-1330197605.png" border="0"><img width="526" height="299" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903092659975-146820595.png" border="0"></p><h3>8.2 Python程序设计思维</h3><p><strong>计算思维与程序设计</strong></p><p>第三种人类思维特征</p><p>逻辑思维:以推理和演绎为特征,以数学为代表,A-&gt;B,B-&gt;C,A-&gt;C</p><p>实证思维:以实验和验证为特征,以物理为代表,引力波&lt;-实验</p><p><strong>计算思维</strong>:以<strong>设计和构造</strong>为特征,计算机为代表,汉诺塔递归</p><p>有非常明显的特征:<strong>抽象和自动化</strong>,抽象问题的计算过程并利用计算自动化求解(并不是抽象因果关系仅仅是抽象过程)</p><p>1+2+..+100&nbsp; 高斯&nbsp;&nbsp;&nbsp;&nbsp; vs&nbsp; 累计</p><p>圆周率&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 高数求和&nbsp;&nbsp; vs&nbsp;&nbsp;&nbsp;&nbsp; 蒙特卡洛方法</p><p>汉诺塔问题&nbsp;&nbsp; 逻辑推理的2的n次方-1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 递归<img width="938" height="1033" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903092707539-2008313275.png" border="0"></p><p>计算思维基于计算机强大的算力和海量的数据</p><p>抽象计算过程,关注设计和构造,而非因果</p><p>以计算机程序设计为主要实现手段</p><p>编程是将计算思维变为现实的手段</p><hr><p><strong><strong>计算生态与Python语言</strong></strong></p><p>从开源运动说起…</p><p>-1983年,Richard Stallman启动GNU项目</p><p>-1989年,GNU通用许可协议诞生,<strong>自由软件时代到来&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong>大教堂模式</p><p>-1991年,Linus Torvalds发布了Linux内核&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 集市模式(成为主流)</p><p>-1998年,网景浏览器开源,产生了Mozilla,<strong>开源生态逐步建立</strong></p><p>计算生态以开源项目为组织形式,充分利用“共识原则”和“社会他人”组织人员,在竞争发展、相互依存和迅速更迭中完成信息技术的更新换代,形成了技术的自我演进路径。</p><p>开源思想深入演化和发展,形成了计算生态</p><p>计算生态是没有顶层设计、以功能为单位、具备三个特点:竞争发展、相互依存和迅速更迭</p><p>python</p><p>-以开源项目为代表的大量第三方库&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Python语言提供 &gt; 13万个第三方库&nbsp; 并以两万+每年的速度发展</p><p>-库的建设经过野蛮生长和自然选择&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同一个功能,Python语言提供2个以上第三方库</p><p>-库之间相互关联使用,依存发展&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Python库间广泛联系,逐级封装</p><p>-社区庞大,新技术更迭迅速&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Alpha Go深度学习算法采用Python语言开源</p><p><strong>API !=&nbsp; 生态</strong></p><p>创新:跟随创新、集成创新、原始创新&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p><p>-计算生态加速科技类应用创新的重要支撑</p><p>-发展科技产品商业价值的重要模式</p><p>-国家科技体系安全和稳固的基础</p><p>刀耕火种 –&gt; <strong>站在巨人的肩膀上</strong></p><p>&nbsp; -编程的起点不是<strong>算法</strong>而是<strong>系统</strong></p><p>&nbsp; -变成如同搭积木,利用计算生态为主要模式</p><p>&nbsp; -编程的目标是<strong>快速解决问题</strong></p><p>优质的计算生态&nbsp; python123&nbsp; 由老师、产业人员共同筛选的优质生态https://python123.io/index/monthly_packages/201808</p><hr><p><strong>用户体验与软件产品</strong></p><p>实现功能 –&gt; 关注体验</p><p>用户体验指用户对产品建立的主管感受和认识</p><p>关心功能实现,更要关心用户体验,才能做出好产品</p><p>编程只是手段,不是目的,程序最终为人类服务</p><p>提高用户体验的方法</p><p>方法1:进度展示&nbsp; </p><p>&nbsp; -如果程序需要计算时间,可能产生等待,请增加进度展示</p><p>&nbsp; -如果程序需要若干步骤,需要提示用户,请增加进度展示</p><p>&nbsp; -如果程序可能存在大量次数的循环,请增加进度展示</p><p>方法2:异常处理</p><p>&nbsp; -当获得用户输入时候,对合规性需要检查,需要异常处理</p><p>&nbsp; -当读写文件时,对结果进行判断,需要异常处理</p><p>&nbsp; -当进行输入输出时,对运算结果进行判断,需要异常处理</p><p>其他方法:</p><p>&nbsp; -打印输出:特定位置,输出程序运行的过程信息verbose</p><p>&nbsp; -日志文件:对程序异常以及用户的使用进行定期记录</p><p>&nbsp; -帮助信息:给用户多种方式提供帮助</p><p>软件程序 到 软件产品,其核心关键就是用户体验</p><hr><p><strong>基本的程序设计模式</strong></p><p><strong>IPO</strong></p><p><strong>模块化设计</strong></p><p><strong>自顶向下设计</strong></p><p><strong>配置化设计</strong>&nbsp;&nbsp; (自动轨迹绘制实例)<img width="953" height="364" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903092719571-1251875720.png" border="0"></p><p>-引擎+配置:程序执行和配置分离,将可选参数配置化</p><p>&nbsp; -将程序开放变为配置文件编写,扩展功能而不修改程序</p><p>&nbsp; -关键在于接口设计,清晰明了,灵活扩展,这是一种更高级别的设计思路</p><p>应用开发的四个步骤:</p><p>1.产品定义&nbsp;&nbsp;&nbsp; 对应用需求充分理解和明确定义</p><p>&nbsp; -产品定义,而不仅是功能定义,要考虑商业模式</p><p>2.系统架构&nbsp; 以系统方式思考产品的技术实现</p><p>&nbsp; -系统架构,关注数据流、模块化、体系架构</p><p>3.设计与实现&nbsp; 结合架构完成关键设计及系统实现</p><p>&nbsp; -结合可扩展性、灵活性、是否适应未来需求变化等进行设计优化</p><p>4.用户体验&nbsp; 从用户角度思考应用效果</p><p>&nbsp; -用户至上,体验优先,以用户为中心构造软件产品</p><h3>8.3 Python第三方库安装</h3><p><strong>看见更大的Python世界</strong></p><p>13万个第三方库&nbsp; 全区社区 https://pypi.org</p><p>PYPI</p><p>&nbsp; -Python Package Index</p><p>&nbsp; -PSF维护的展示全球Python计算生态的主站</p><p>&nbsp; -学会检索并利用PyPI,找到合适的第三方开发程序</p><p>3种安装方法:</p><p>&nbsp; -方法1(主要方法):使用pip命令</p><p>&nbsp; -方法2:集成安装方法</p><p>&nbsp; -方法3:文件安装方法</p><hr><p><strong>pip安装方法(最主要的方法)</strong></p><p>pip&nbsp; -h 可以查看帮助</p><p>pip install &lt;第三方库名&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装</p><p>pip install –U &lt;第三方库名&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 升级</p><p>pip uninstall &lt;第三方库名&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 卸载</p><p>pip download &lt;第三方库名&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下载单并不安装</p><p>pip show &lt;第三方库名&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 列出某个第三方库的详细信息</p><p>pip search 关键词&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 搜索第三方库</p><p>pip list&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 列出已安装的第三方库</p><hr><p><strong>集成安装方法</strong></p><p>结合安装工具,批量安装,不过这样的安装工具不多,推荐一个叫anaconda<img width="958" height="438" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093033828-94423937.png" border="0"></p><p><strong>文件安装方法</strong></p><p>为什么有些第三方库用pip可以下载,单无法安装?</p><p>&nbsp; -某些第三方库下载后,需要编译再安装</p><p>&nbsp; -如果操作系统没有编译环境,则能下载单不能安装</p><p>&nbsp; -可以找编译后的版本来安装吗&nbsp; http://www.lfd.uci.edu/~gohlke/pythonlibs&nbsp;&nbsp; UCI页面&nbsp; 加州大学教授维护的 win系统的直接编译后的版本</p><p>pip install 文件</p><h3>8.4 模块7:os库的使用</h3><p>os库提供通用的、基本的操作系统交互功能</p><p>是python标准库,由几百个函数,包括常用路径操作、进程管理、环境参数等几类</p><p>&nbsp; -路径操作:os.path子库,处理文件路径及信息</p><p>&nbsp; -进程管理:启动系统中其他程序</p><p>&nbsp; -环境参数:获得系统软硬件信息等参数</p><hr><p><strong>路径操作</strong></p><p>os.path子库以path为入口,用于操作和处理文件路径</p><p>import os.path</p><p>import os.path as op<img width="944" height="531" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093039870-1434659835.png" border="0"><img width="954" height="1200" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093046994-985915432.png" border="0"><img width="925" height="196" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093054734-834914109.png" border="0"><img width="952" height="518" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093101474-631037923.png" border="0"></p><p><strong>os库进程管理</strong></p><p>os.system(command)&nbsp;&nbsp; 调用其他程序</p><hr><p>os库之环境参数</p><p>获取或改变系统环境信息<img width="959" height="849" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093108366-2146433984.png" border="0"></p><h3>8.5 实例14:第三方库安装脚本</h3><p>第三方库自动安装脚本<img width="918" height="343" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093446156-1917847543.png" border="0"></p><h2>9 Python计算生态概览</h2><h3>9.1 从数据处理到人工智能</h3><p>从数据处理到人工智能的完整链条:数据表示-&gt;数据清洗-&gt;数据统计-&gt;数据可视化-&gt;数据挖掘-&gt;人工智能<img width="967" height="504" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093452776-1955971650.png" border="0"></p><p><strong>Python库之数据分析</strong></p><p><strong>Numpy</strong>:表达N维数组的最基础库</p><p>&nbsp; -Python接口使用,C语言实现,计算速度优异</p><p>&nbsp; -Python数据分析及科学计算的基础库,支撑Pandas等</p><p>&nbsp; -提供直接的矩阵运算、广播函数、线性代数等功能<img width="951" height="515" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093458862-1532277949.png" border="0"></p><p><strong>Pandas</strong>:Python数据分析高层次应用库</p><p>&nbsp; -提供了简单易用的数据结构和数据分析工具</p><p>&nbsp; -理解数据类型与索引的关系,操作索引即操作数据</p><p>&nbsp; -Python库最主要的<strong>数据分析</strong>功能库,基于Numpy开发</p><p>提供两个数据结构:</p><p>Series = 索引 + 一维数据</p><p>DataFrame = 行列索引 + 二维数据<img width="956" height="424" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093506025-2022807081.png" border="0"></p><p><strong>Scipy</strong>:数学、科学和工程计算功能库</p><p>&nbsp; -提供了一批数学算法及工程数据运算功能</p><p>&nbsp; -类似Matlab,可用于傅里叶变换、信号处理等应用</p><p>&nbsp; –Python最主要的<strong>科学计算</strong>功能库,基于Numpy开发<img width="961" height="451" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093649551-460108869.png" border="0"></p><p><strong>Python库之数据可视化</strong></p><p><strong>Matplotlib</strong>:高质量的二维数据可视化功能库,有大量子库</p><p>&nbsp; -提供了超过100种数据可视化展示效果</p><p>&nbsp; -通过matplotlib.pyplot子库调用各可视化效果</p><p>&nbsp; -Python最主要的<strong>数据可视化</strong>功能库,基于Numpy开发<img width="951" height="499" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093655759-1758598790.png" border="0"></p><p><strong>Seaborn</strong>:统计类数据可视化功能库</p><p>&nbsp; -提供了一批高层次的统计类数据可视化展示效果</p><p>&nbsp; -主要展示数据间分布、分类和线性关系等内容</p><p>&nbsp; -基于Matplotlib开发,支持Numpy和Pandas<img width="961" height="410" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093702381-1587660589.png" border="0"></p><p><strong>Mayavi</strong>:三维科学计算可视化功能库</p><p>&nbsp; -提供了一批简单易用的3D科学计算数据可视化展示效果</p><p>&nbsp; -目前是Mayavi2,三维可视化最主要的第三方库</p><p>&nbsp; -支持Numpy、TVTK、Traits、Envisage等第三方库<img width="944" height="424" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093711069-351712314.png" border="0"></p><p><strong>Python库之文本处理</strong></p><p><strong>PyPDF2</strong>:用来处理pdf文件的工具集</p><p>&nbsp; -提供了一批处理PDF文件的计算功能</p><p>&nbsp; -支持获取信息、分隔/整合文件、加密解密等</p><p>&nbsp; -完全Python语言实现,不需要额外依赖,功能稳定<img width="945" height="417" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093827689-1316911320.png" border="0"></p><p><strong>NLTK</strong>:自然语言文本处理第三方库</p><p>&nbsp; –提供了一批简单易用的自然语言文本处理功能</p><p>&nbsp; -支持语言文本分类、标记、语法句法、语义分析等</p><p>&nbsp; -最优秀的Python自然语言处理库<img width="950" height="395" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093833850-1049705573.png" border="0"></p><p><strong>Python-docx</strong>:创建或更新word文档的第三方库</p><p>&nbsp; -提供创建或更新.doc .docx等文件的计算功能</p><p>&nbsp; -增加并配置段落、图片、表格、文字等,功能全面<img width="961" height="377" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093840703-112049543.png" border="0"></p><p><strong>Python库之机器学习</strong></p><p><strong>Scikit-learn</strong>:机器学习方法工具集</p><p>&nbsp; -提供一批统一化的机器学习方法功能接口</p><p>&nbsp; -提供聚类、分类、回归、强化学习等计算功能</p><p>&nbsp; -机器学习最基本且最优秀的Python第三方库<img width="957" height="573" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093946174-471317484.png" border="0"></p><p><strong>TensorFlow</strong>:AlphaGo背后的机器学习计算框架</p><p>&nbsp; -谷歌公司推动的开源机器学习框架</p><p>&nbsp; -将数据流图作为基础,图节点代表运算,边代表张量</p><p>&nbsp; -应用机器学习方法的一种方式,支撑谷歌人工智能应用<img width="956" height="411" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903093952709-419586879.png" border="0"></p><p><strong>MXNet</strong>:基于神经网络的深度学习计算框架</p><p>&nbsp; -提供可扩展的神经网络及深度学习计算功能</p><p>&nbsp; -可用于自动驾驶、机器翻译、语音识别等众多领域</p><p>&nbsp; -Python最重要的深度学习计算框架<img width="931" height="412" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903094001609-1414746955.png" border="0"></p><h3>9.2 实例15:霍兰德人格分析雷达图</h3><p>问题分析:</p><p>啥是雷达图<img width="963" height="418" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903094350612-1126868321.png" border="0"></p><p>霍兰德认为:人格兴趣和职业之间有内在的对应关系</p><p>人格分类:研究型、艺术型、社会型、企业型、传统型、现实型</p><p>职业:工程师、实验员、艺术家、推销员、记事员、社会工作者</p><p>需求:雷达图方式验证霍兰德人格分析</p><p>输入:各职业人群结合兴趣的调研数据</p><p>输出:雷达图</p><p>展示多维数据以及绘制雷达图的能力<img width="1024" height="720" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903094357901-1854514865.png" border="0"><img width="733" height="587" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903094404320-1949065299.png" border="0">目标+沉浸+熟练</p><p>&nbsp; -编程的目标感:寻找感兴趣的目标,寻(wa)觅(jue)之</p><p>&nbsp; -编程的沉浸感:寻找可实现的方法,思(zuo)考(mo)之</p><p>&nbsp; -编程的熟练度:练习、练习、再练习,熟练之</p><p>编程不是最主要的,编程的感觉才是最重要的</p><h3>9.3 从Web解析到网络空间</h3><p><strong>Python库之网络爬虫</strong></p><p><strong>Requests</strong>:最友好的网络爬虫库</p><p>&nbsp; -提供了简单易用的类HTTP协议网络爬虫功能</p><p>&nbsp; -支持连接池、SSL、Cookies、HTTP(S)代理等</p><p>&nbsp; -Python最主要的页面级网络爬虫功能库<img width="948" height="408" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903094413621-68989412.png" border="0"></p><p><strong>Scrapy</strong>:优秀的网络爬虫框架</p><p>&nbsp; -提供了构建网络爬虫系统的框架功能,半成品</p><p>&nbsp; -支持批量和定时页面爬取、提供数据处理流程等</p><p>&nbsp; -Python最主要且最专业的网络爬虫框架<img width="948" height="442" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903094424653-536562717.png" border="0"></p><p><strong>pyspider</strong>:强大的Web页面爬取系统</p><p>&nbsp; -提供了完整的网页爬取系统构建功能</p><p>&nbsp; -支持数据库后端、消息队列、优先级、分布式架构等</p><p>&nbsp; -Python重要的网络爬虫第三方库<img width="965" height="387" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903094433299-1470904858.png" border="0"></p><p><strong>Python库之Web信息提取</strong></p><p><strong>Beautiful Soup</strong>:HTML和XML的解析库</p><p>&nbsp; -提供了解析HTML和XML等Web信息的功能</p><p>&nbsp; -又名beautifulsoup4或bs4,可以加载多种解析引擎</p><p>&nbsp; -常与网络爬虫库搭配使用,如Scrapy、requests等<img width="951" height="401" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903094441902-611183051.png" border="0"></p><p><strong>Re</strong>:正则表达式解析和处理功能库</p><p>&nbsp; -提供了定义和解析正则表达式的一批通用功能</p><p>&nbsp; -可用于各类场景,包括定点的Web信息提取</p><p>&nbsp; -Python最主要的标准库,无需安装<img width="959" height="417" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903094811189-1248964202.png" border="0"></p><p>Python-Goose:提取文章类型Web页面的功能库</p><p>&nbsp; -提供了对Web页面中文章信息/视频等元数据的提取功能</p><p>&nbsp; -针对特定类型Web页面,应用覆盖面较广<img width="948" height="389" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903094823088-247423836.png" border="0"></p><p>相对于bs4库,抽象层次更加高,更加方便</p><hr><p><strong>Python库之Web网站开发</strong></p><p><strong>Django</strong>:最流行的Web应用框架</p><p>&nbsp; -提供了构建Web系统的基本应用框架</p><p>&nbsp; -MTV模式:模型(model)、模式(Template)、视图(Views)</p><p>&nbsp; -Python最重要的Web应用框架,略微复杂的应用框架,比较适合专业的网站构建<img width="944" height="437" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903094829464-1415078844.png" border="0"></p><p><strong>Pyramid</strong>:规模适中的Web应用框架</p><p>&nbsp; -提供了简单方便构建Web系统的应用框架</p><p>&nbsp; -不大不小,规模适中,适合快速构建并适度扩展类应用</p><p>&nbsp; -Python产品级Web应用框架,起步简单可扩展性好<img width="958" height="422" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903094836007-112100194.png" border="0"></p><p><strong>Flask</strong>:Web应用开发微框架</p><p>&nbsp; -提供了最简单构建Web系统的应用框架</p><p>&nbsp; -特点是:简单、规模小、快速</p><p>-Django &gt; Pyramid &gt; Flask好<img width="941" height="406" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903094842583-1974463885.png" border="0"></p><p><strong>Python库之网络应用开发</strong></p><p><strong>WeRoBot</strong>:微信公众号开发框架</p><p>&nbsp; -提供了解析微信服务器消息及反馈消息的功能</p><p>&nbsp; -建立微信机器人的重要手段<img width="957" height="410" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903094848934-1407308501.png" border="0"></p><p><strong>aip</strong>:百度AI开放平台接口</p><p>&nbsp; -提供了访问百度AI服务的Python接口</p><p>&nbsp; -语音、人脸、OCR、NLP、知识图谱、图像搜索等领域</p><p>&nbsp; -Python百度AI应用的最主要方式<img width="948" height="428" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903094856179-199549608.png" border="0"></p><p>MyQR:二维码生成第三方库</p><p>&nbsp; -提供了生成二维码的系列功能</p><p>&nbsp; -基本二维码、艺术二维码和动态二维码<img width="950" height="269" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903094907666-1147391128.png" border="0"></p><h3>9.4 从人机交互到艺术设计</h3><p><strong>Python库之图形用户界面</strong></p><p><strong>PyQT5</strong>:QT开放框架的Python接口</p><p>&nbsp; -提供了创建QT5程序的Python API接口</p><p>&nbsp; -Qt是非常成熟的跨平台桌面应用开发系统,完备GUI</p><p>&nbsp; -推荐的Python GUI开发第三方库<img width="955" height="380" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903095213458-658417161.png" border="0"></p><p><strong>wxPython</strong>:跨平台GUI开发框架</p><p>&nbsp; -提供了专用于Python的跨平台GUI开发框架</p><p>&nbsp; -Python最主要的图形用户界面<img width="922" height="371" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903095220844-1056837862.png" border="0"></p><p><strong>PyGObject</strong>:使用GTK+开发GUI的功能库</p><p>&nbsp; -提供了整合GTK+、WebKitGTK+等库的功能</p><p>&nbsp; -GTK+:跨平台的一种GUI框架</p><p>&nbsp; -实例:Anaconda采用该库构建GUI<img width="950" height="405" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903095227794-1972703263.png" border="0"></p><p><strong>Python库之游戏开发</strong></p><p><strong>PyGame</strong>:简单的游戏开发功能库</p><p>&nbsp; -提供了基于SDL的简单游戏开发功能及实现引擎</p><p>&nbsp; -理解游戏对外部输入的相应机制及角色构建和交互机制</p><p>&nbsp; -Python游戏入门最主要的第三方库<img width="958" height="377" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903095235334-1744300588.png" border="0"></p><p><strong>Panda3D</strong>:开源、跨平台的3D渲染和游戏开发库</p><p>&nbsp; -一个3D游戏引擎,提供Python和C++两种接口,Python接口更加全面也是该库推荐使用的语言</p><p>&nbsp; -支持很多先进特性:法线贴图、光泽贴图、卡通渲染等</p><p>&nbsp; -由迪士尼和卡内基梅隆大学共同开发<img width="961" height="354" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903095242509-1868256653.png" border="0"></p><p>cocos2d:构建2D游戏和图形界面交互应用的框架</p><p>&nbsp; -提供了基于OpenGL的游戏开发图形渲染功能</p><p>&nbsp; -支持GPU加速,采用树形结构分层管理游戏对象类型</p><p>&nbsp; -适用于2D专业级游戏开发<img width="963" height="359" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903095251846-1281829396.png" border="0"></p><p><strong>Python库之虚拟现实</strong></p><p><strong>VR Zero</strong>:在树莓派上开发VR应用的Python库</p><p>&nbsp; -提供大量与vr开发相关的功能</p><p>&nbsp; -针对树莓派的vr开发库,支持设备小型化,配置简单化</p><p>&nbsp; -非常适合初学者实践vr开发及应用<img width="955" height="632" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903095259378-839351925.png" border="0"></p><p><strong>pyovr</strong>:Oculus Rift的Python接口</p><p>&nbsp; -针对Oculus VR设备的python开发库</p><p>&nbsp; -基于成熟的VR设备,提供全套文档,工业级应用设备</p><p>&nbsp; -Python+虚拟现实领域探索的一种思路<img width="949" height="383" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903095308394-1503114258.png" border="0"></p><p><strong>Vizard</strong>:基于Python的通用VR开发引擎</p><p>&nbsp; -专业的企业级虚拟现实开发引擎</p><p>&nbsp; -提供详细的文档</p><p>&nbsp; -支持多种主流的VR硬件设备,具有一定的通用性<img width="953" height="378" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903095525792-977594342.png" border="0"></p><p><strong>Python库之图形艺术</strong></p><p><strong>Quads</strong>:迭代的艺术</p><p>&nbsp; -对图片进行四分迭代,形成像素风</p><p>&nbsp; -可以生成动态或者静态图片</p><p>&nbsp; -简单易用,具有很高展示度<img width="949" height="380" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903095533203-644487331.png" border="0"></p><p><strong>ascii_art</strong>:ASCII艺术库</p><p>&nbsp; -将普通图片转为ASCII艺术风格</p><p>&nbsp; -输出可以是纯文本或彩色文本</p><p>&nbsp; -可采用图片格式输出<img width="959" height="549" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903095539567-566004.png" border="0"><strong>turtle</strong>库<img width="961" height="896" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903095546867-2063184684.png" border="0"></p><h3>9.5 实例16:玫瑰花绘制</h3><p>问题分析:<img width="959" height="500" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903095557599-1812640255.png" border="0"><img width="815" height="1221" title="image" style="margin: 0 auto; border: 0 currentColor; border-image: none; float: none; display: block; background-image: none" alt="image" src="https://img2018.cnblogs.com/blog/1393680/201909/1393680-20190903095641742-38046218.png" border="0"></p>

</div>
<div id="MySignature" role="contentinfo">
    作者:九命猫幺 <br>
博客出处:http://www.cnblogs.com/yongestcat/ <br>
欢迎转载,转载请标明出处。 <br>
如果你觉得本文还不错,对你的学习带来了些许帮助,请帮忙点击右下角的推荐<br><br><br>
来源:https://www.cnblogs.com/yongestcat/p/11444691.html
頁: [1]
查看完整版本: 【学习笔记】PYTHON语言程序设计(北理工 嵩天)