导图社区 Python语言程序设计
本导图为Python入门笔记,包括基本语法元素、基本数据类型、程序控制结构、Python计算生态以及turtle、time、random、jieba、worlcloud、os等第三方库,导图内容为中国大学MOOC—Python语言程序设计(北京理工大学)学习笔记,配合课程使用效果更好。
编辑于2021-07-09 16:59:46本导图为作者备考中级经济师(人力资源)过程中形成的学习笔记,已取得人力资源管理师证。中级经济专业技术资格考试设《经济基础知识》和《专业知识和实务》两个科目,题型均为客观题。《专业知识和实务》为专业科目,分为工商管理、农业经济、财政税收、金融、保险、运输经济、人力资源管理、旅游经济、建筑与房地产经济、知识产权10个专业类别;《经济基础知识》为公共科目,由经济学基础、财政、货币与金融、法律、会计、统计六个部分组成。
本导图为中级经济师考试科目《经济基础知识》的统计部分,主要包括统计与数据科学、描述统计、抽样统计、回归分析、时间序列分析。
本导图为中级经济师考试科目《经济基础知识》的货币与金融部分,主要包括货币供求与货币均衡、中央银行与货币政策、商业银行与金融市场、金融风险与金融监管、对外金融关系与政策。
社区模板帮助中心,点此进入>>
本导图为作者备考中级经济师(人力资源)过程中形成的学习笔记,已取得人力资源管理师证。中级经济专业技术资格考试设《经济基础知识》和《专业知识和实务》两个科目,题型均为客观题。《专业知识和实务》为专业科目,分为工商管理、农业经济、财政税收、金融、保险、运输经济、人力资源管理、旅游经济、建筑与房地产经济、知识产权10个专业类别;《经济基础知识》为公共科目,由经济学基础、财政、货币与金融、法律、会计、统计六个部分组成。
本导图为中级经济师考试科目《经济基础知识》的统计部分,主要包括统计与数据科学、描述统计、抽样统计、回归分析、时间序列分析。
本导图为中级经济师考试科目《经济基础知识》的货币与金融部分,主要包括货币供求与货币均衡、中央银行与货币政策、商业银行与金融市场、金融风险与金融监管、对外金融关系与政策。
Python语言程序设计
本导图为Python入门笔记,包括基本语法元素、基本数据类型、程序控制结构、Python计算生态以及turtle、time、random、jieba、worlcloud、os等第三方库,导图内容为中国大学MOOC—Python语言程序设计(北京理工大学)学习笔记,配合课程使用效果更好。
一、 Python基本语法元素
编译和解释
编译:一次性翻译,之后不再需要源代码 解释:一边翻译一边执行,源代码一直存在 静态语言:使用编译执行的编程语言,例如:C、C++、Java 脚本语言:使用解释执行的编程语言,例如:Python、JavaScript、PHP
程序的基本编写方法
IPO
IPO I:Input,程序的输入 P:Process,程序的主要逻辑 O:Output,程序的输出
编程解决问题的步骤
1、分析问题 2、划分边界 3、设计算法 4、编写程序 5、调试测试 6、升级维护
语法元素分析
33个保留字

字符串的序号
序号正反向皆可 索引: TempStr[-1],TempStr字符串的最后一位 TempStr[0],TempStr字符串的第一位 切片: TempStr[0:-1]:TempStr字符串的第一位到倒数第二位 TempStr[1:]:TempStr字符串的第二位到最后一位 TempStr[0:3]:TempStr字符串的第一位到第三位
语句与函数
分支语句:由判断条件决定程序运行方向的语句 由保留字if、elif、else构成条件判断的分支结构: if .....: elif....: else: 函数: print()函数的格式化  eval():去掉参数最外侧引号并执行余下语句的函数  
二、 Python基本图形绘制
turtle库的使用
Python计算生态
标准库+第三方库
turtle的绘图窗体
turtle.setup(width,height,startx,starty) 
turtle的空间坐标体系
绝对坐标
turtle.goto(x,y) 
海龟坐标
turtle.fd(d):向前走d个像素 turtle.bk(d):向后走d个像素 turtle.circle(r,angle):以r为半径,走angle度 
turtle的角度坐标体系
绝对角度
turtle.seth(angle) 
海龟角度
turtle.left(angle) turtle.right(angle) 
RGB色彩体系
常用RGB色彩
 
turtle的RGB色彩模式
turtle.colormode(mode) 1.0:RGB小数值模式 255:RGB整数值模式
turtle程序语法元素分析
import
第一种方式: import 库名 库名.函数名(函数参数) 第二种方式: import 库名 as 库别名 库别名.函数名(函数参数)
循环语句与range()函数
for 变量 in range(次数): 被循环执行的语句 range(N):产生0到N-1的整数序列,共N个 range(M,N):产生M到N-1的整数序列,共N-M个 
turtle
画布设置
turtle.title()
设置窗口名称
turtle.setup()
设置绘图窗口大小和位置 turtle.setup(width,height,startx,starty) 位置可省略,默认在屏幕中间 
turtle.bgcolor()
设置画布背景颜色 turtle.bgcolor('black') 默认为白色
画笔设置
turtle.pencolor()
画笔颜色设置 turtle.pencolor('red') 默认为黑色
turtle.color()
tuttle.color("black","red") 画笔颜色为黑色,填充颜色为红色
turtle.begin_fill()
开始填充
tuttle.end_fill()
结束填充
turtle.pensize()
画笔宽度设置 turtle.pensize(2) 不写该语句,系统默认画笔宽度为1像素
turtle.penup()
提起画笔,只移动不绘图
turtle.pendown()
放下画笔,正常绘图
turtle.speed()
绘制速度设置 turtle.speed(6) 参数取0~10中的整数,1至10逐渐加快,0最快
运动控制
turtle.fd()
向前移动,不改变海龟方向 turtle.fd(100) 向前移动100像素,参数为负时表示后移
turtle.circle()
绘制半径为r,角度为extent的圆弧,海龟方向随角度变化。 turtle.circle(r,extent):r为正数时圆心在左,r为负数时圆心在右。extent为正数时正着运动,extent为负数时倒着运动 t.circle(150): 不设置extent时,默认为360度即圆 
turtle.goto()
移动到坐标(x,y)处,不改变海龟方向 turtle.goto(x,y) 
方向控制
turtle.left()
左转 turtle.left(60) 海龟左转60度
turtle.right()
右转 turtle.right(60) 海龟右转60度
turtle.seth()
海龟转动任意角度 turtle.seth(60) 海龟左转60度 turtle.seth(-60) 海龟右转60度
其他功能
turtle.home()
海龟回到初始位置和初始方向
turtle.write(arg,move,align,font)
在画板中写入文本 write(arg, move=False, align='left', font=('Arial', 8, 'normal')) arg:要写入的信息 move:False/TRUE,为False时,海龟回到写arg时的初始位置;为True时,海龟回到arg的右下角。默认为False。 align:"left"/ "center" / right",对齐方式,默认左对齐 font:字体设置
turtle.hideturtle()
将海龟隐藏起来
turtle.done()
用于程序结尾: 有该语句时,绘图完毕窗口不消失; 无该语句,绘图完毕窗口自动小时。
三、 基本数据类型
数字类型及操作
整数类型
十进制
2
二进制
0b010,0B010
八进制
0o123,0O123
十六进制
0x9a,0X9a
浮点数类型
尾数问题
不确定尾数一般发生在10^(-16)左右,用round函数解决尾数问题 round(x,d):对x四舍五入,d是小数位数 
科学计数法
aeb:a*10^b 4.3e-3值为0.0043
复数类型
数值运算操作符
数值运算操作符
x+y x-y x*y x/y:除,10/3结果是3.3333333333333335 x//y:整数除,10//3结果是3 +x -y x%y:余数,模运算10%3结果是1 x**y:x的y次幂,y可以为小数,10**0.5的结果是根号10
增强赋值操作符
xop=y op为二元操作符 x+=y,x-=y,x*=y,x/=y,x//=y,x%=y,x**=y 例如:x**=y与x=x**y等价
数字类型关系
逐渐变宽: 整数→浮点数→复数 例如:123+4.0=127.0,整数+浮点数=浮点数
数值运算函数
abs(x):绝对值
divmod(x,y):商余
pow(x,y,[z]):幂余
round(x,d)
max(x1,x2,...xn)
min(x1,x2,...xn)
int(x)
float(x)
complex(x)
天天向上的力量
代码
A:一年365天,每天进步1%,不停歇 B:一年365天,每周工作5天休息两天,休息日每天下降1% 问:B需要在工作日每天进步多少才能不落后于A? #daydayup.py def dayUp(df): dayup=1 for i in range(365):#西方国家周日为每周第一天 if i%7 in [6,0]: dayup=dayup*(1-0.01) else: dayup=dayup*(1+df) return dayup dayfactor=0.01 while dayUp(dayfactor)<37.78: dayfactor+=0.001 print("工作日的努力参数是:{:.3f}".format(dayfactor))
涉及函数
def dayUP(df): ....... return dayup while dayUP(dayfactor)<37.78: .......
字符串类型及操作
字符串类型的表示
4种表示方法
单行字符串: 一对单引号' ' 一对双引号“ ” 多行字符串: 一对三单引号‘’‘ ’‘’ 一对三双引号“”“ ”“” 设计多种表达方式的原因:让字符串中可以包含单引号、双引号 '这里有个双引号(")' 或者 "这里有个单引号(')" ''' 这里既有单引号(')又有双引号 (") '''
字符串的序号

字符串的使用
索引:字符串[M]:返回字符串中的单个字符 切片:字符串[M:N]:返回字符串中从从M到N-1的一段字符串 切片高级用法: 字符串[M:N],M缺失表示从0开始,N缺失表示至最后一位 字符串[M:N:K],根据步长K对字符串切片 “一二三”[::-1],结果是“三二一”
字符串的特殊字符
\:转义符,表达特定字符的本意 " 这里有个双引号(\")" 结果为 这里有个双引号(") 一些转义符组合: “\b”:回退 “\n”:换行 “\r”:回车
字符串操作符
x+y
连接字符串x和y
n*x或x*n
赋值n次字符串x
x in s
如果x是s的字串,返回TRUE,否则返回False
字符串处理函数
len(x)
返回字符串x的长度
str(x)
将任意类型的x转换为字符串
oct(x)
将整数x转换为八进制形式的字符串
hex(x)
将整数x转换为十六进制形式的字符串
Unicode编码
统一字符编码,几乎覆盖所有字符的编码方式 编码范围:0~1114111 chr(编码):输出该编码的对应字符 ord("字符"):输出该字符的对应编码
字符串处理方法
str.lower()或str.upper()
将str中的字符全部转换为小写或大写
str.split(sep)
以str中的每个sep为分割符,将str分隔开 默认以空格为分隔符 "A,B,C".split(",") 结果为 ['A','B','C']
str.count(sub)
计算sub在str中出现的次数
str.replace(old,new)
将str中的old替换为new "python".replace("n","n123.io") 结果为"python123.io"
str.center(width,fillchar)
str根据width居中,fillchar为填充字符,可省略 "python".center(20,"=") 结果为 '=======python======='
str.strip(chars)
1、去掉str中的chars "= python= ".strip(" =np") 结果为"ytho" 2、.strit() 参数为空时,默认删除空白符(‘n',’r',‘ ’)
str.join(iter)
在iter中的所有元素中间添加一个str ",".join("12345") 结果为"1,2,3,4,5"
字符串类型的格式化
format()
{参数序号:格式控制标记} print("{}:计算机{}的CPU占用率为{}%".format("2018-10-10","C",10)) 结果为:2018-10-10:计算机C的CPU占用率为10% print("{1}:计算机{0}的CPU占用率为{2}%".format("2018-10-10","C",10)) 结果为:C:计算机2018-10-10的CPU占用率为10%
格式控制
:<填充><对齐><宽度><,><.精度><类型> 对齐: <:左对齐 >:右对齐 ^:居中对齐 类型: b:二进制 c:Unicode字符 d:十进制 o:八进制 x或X:十六进制 e或E:科学计数法 f或F:浮点型 %:百分比
time库的使用
时间获取
time()
获取当前时间,以浮点数形式显示
ctime()
获取当前时间,以易读字符串形式显示
gmtime()
获取当前时间,以计算机可处理的格式显示
时间格式化
strftime(tpl,ts)
 格式化模板: %Y:年份,0000~9999 %m:月份,,0~12 %d:日期,01~31 %H:小时,00~23 %M:分钟,00~59 %S:秒,00~59 %B:月份名称,January~December %b:月份缩写,Jan~Dec %A:星期,Monday~Sunday %a:星期缩写,Mon~Sun %I:小时,01~12 %p:上/下午,AM/PM
strptime(str,tpl)

程序计时
sleep(s)
s:休眠时间,单位是秒
perf_counter()

文本进度条
命令窗口路径切换
回到根目录:cd/ 回到上一级目录:cd.. 进入下级目录:cd Python 切换到其他盘:cd D: 绝对路径切换:cd /d D:\Python
实例代码
#TextProBarV3.py #由于IDLE屏蔽了\r功能,本程序需要在命令窗口进入文件所在文件夹,进而调用文件执行 import time scale=50 print("执行开始".center(scale,"-")) start=time.perf_counter() for i in range(scale+1): a='*'*i b='.'*(scale-i) c=(i/scale)*100 dur=time.perf_counter()-start print("\r{:^3.0f}%[{}-->{}]{:.2f}s".format(c,a,b,dur),end='') time.sleep(0.05) print("\n"+"执行结束".center(scale,'-'))
文本进度条的不同设计函数

四、 程序的控制结构
程序的分支结构
单分支结构
if 条件: 语句
二分支结构
if 条件: 语句块1 else: 语句块2
多分支结构
if 条件1: 语句块1 elif 条件2: 语句块2 elif 条件3: 语句块3 ............ else: 语句块N
程序的控制结构
顺序结构
分支结构
循环结构
条件判断及组合
条件判断
< <= > >= == !=
条件组合
x and y x or y not x
程序的异常处理
try: 语句块1 except 异常类型: 语句块2 try : num = eval(input("请输入一个整数: ")) print(num**2) except NameError: print("输入不是整数")
BMI分析
多输入
h,w=input() 输入的时候将两个变量用英文“,”隔开
多变量赋值
h,w="","" h,w="正常","正常"
代码
#BMI.py h,w=eval(input("输入身高(米)和体重(千克):")) bmi=w/pow(h,2) print("BMI:{:.2f}".format(bmi)) F,N="","" if bmi<18.5: F,N="偏瘦","偏瘦" elif 18.5<=bmi<24: F,N="正常","正常" elif 24<=bmi<25: F,N="正常","偏胖" elif 25<=bmi<28: F,N="偏胖","偏胖" elif 28<=bmi<=30: F,N="偏胖","肥胖" else: F,N="肥胖","肥胖" print("BMI指标分类为:国际{},国内{}".format(F,N))
程序的循环结构
遍历循环:for...in...
计数循环
for i in range(N): 语句块 for i in range(M,N,K): 语句块
字符串遍历循环
for c in s: 语句块 for c in "Python123": print(c, end=",") 结果:P,y,t,h,o,n,1,2,3,
列表遍历循环
for item in ls: 语句块 ls是一个列表,遍历其每个元素
文件遍历循环
for line in fi: 语句块 fi是一个文件标识符,遍历其每一行
无限循环
while 条件: 语句块
循环控制保留字
break
跳出并结束当前循环
continue
结束当次循环
break VS continue
 
循环的高级用法
1、for .... in ....: 语句块1 else: 语句块2 2、while .....: 语句块1 else: 语句块2 当没有被break语句退出时,else作为循环完成的奖励 
random库的使用
采用梅森旋转算法生成伪随机数
基本随机函数

seed()
初始化随机数种子,默认为当前系统时间 注:相同的随机数种子产生相同的随机数
random()
生成一个[0.0,1.0)之间的随机小数
扩展随机函数
uniform(a,b)
生成一个[a,b]之间的随机小数
randint(a,b)
生成一个[a,b)之间的随机整数
randrange(m,n,k)
生成一个[m,n)之间以k为步长的随机整数
getrandbits(k)
生成一个K比特长的随机整数
choice(seq)
从序列seq中随机选择一个元素
shuffle(seq)
将seq中的元素随机排列
圆周率的计算
蒙特卡洛方法
概率就是比例 直径为2的圆的面积为pi 边长为2的正方形的面积为4 则:1/4圆的面积÷单位正方形的面积=1/4pi 往单位正方形上随机撒大量的点,那么: 落在1/4圆的点数÷落在单位正方形的点数≈1/4pi 点数越多越精确 
代码
#Pi.py from random import random from time import perf_counter darts=pow(10,6) hits=0.0 start=perf_counter() for i in range (1,darts+1): x,y=random(),random() dist=pow(x**2+y**2,0.5) if dist<=1: hits=hits+1 pi=hits/darts*4 print("圆周率值是:{}".format(pi)) print("运行时间是:{:.5f}s".format(perf_counter()-start))
思维方式
数学思维:找到公式,利用公式求解 计算思维:抽象一种过程,用计算机自动化求解
程序运行时间分析
通过time.perf_counter()函数获得程序运行时间,从而分析程序运行时间的分布,一般程序的运行时间主要用在循环中。
五、 函数和代码复用
函数的定义与使用
函数的定义
def 函数名(参数): 函数体 return 返回值
函数的参数传递
参数个数
可以有也可以没有,但必须保留括号
可选参数传递
def 函数名(非可选参数,可选参数): 函数体 return 返回值 def fact(n,m=1): s=1 for i in range(1,n+1): s*=i return s//m a=fact(10) b=fact(10,2) print(a,b) >>> 3628800 1814400
可变参数传递
def 函数名(参数,*b): 函数体 return 返回值 def fact(n,*b): s=1 for i in range(1,n+1): s*=i for item in b: s*=item return s a=fact(10,3) b=fact(10,3,5,8) print(a,b) >>>10886400 435456000
传递方式
1、位置传递 def fact(n,m=1): >>>fact(10,5) 2、名称传递 def fact(n,m=1): >>>fact(m=5,n=10)
函数的返回值
可以返回0或多个结果
可以按照位置或名称方式传递
位置传递: >>>fact(10,5) 名称传递: >>>a,b,c=fact(10,5)
局部变量和全局变量
函数外部定义全局变量

函数内部定义全局变量

局部变量为组合且未创建时等同于全局变量
未创建:  创建: 
lambda函数
用于定义简单函数 >>> f=lambda x,y: x+y >>> f(10,15) 25
七段数码管绘制
绘制步骤
问题:怎样用turtle以数码管形式绘制当前系统时间 1、绘制单个数码管 2、获得一串数字,绘制对应数码管 3、获得当前系统时间,绘制对应数码管
代码
#LED.py import turtle import time def 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.right(180) turtle.penup() turtle.fd(20)#移动到下一个数码管的起点 def drawDate(date):#date为日期,格式为'%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(900,350,200,200) turtle.penup() turtle.fd(-340) turtle.pensize(5) turtle.speed(0) drawDate(time.strftime('%Y-%m=%d+',time.gmtime())) turtle.hideturtle()#隐藏海龟 turtle.done() main()
代码复用与函数递归
代码复用
把代码当成资源进行抽象: 代码资源化、代码抽象化、代码复用 代码复用的形式: 函数、对象
函数递归的理解
两个关键特征
链条:计算过程存在递归链条 基例:存在一个或多个不需要再次递归的基例
递归的实现
 调用过程: 
字符串反转
方法1:s[::-1] 方法2: 
斐波那契数列
 
汉诺塔
汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 答案:需要2^n-1次 count=0 def hanoi(n,src,dst,mid):#把n个圆盘按照从小到大的顺序从初始柱移动到目标柱 global count if n==1: print("{}:{}-->{}".format(1,src,dst)) count+=1 else: hanoi(n-1,src,mid,dst)#把n-1个圆盘按照从小到大的顺序从初始柱移动到中转柱 print("{}:{}-->{}".format(n,src,dst))#把第n个圆盘从初始柱移动到目标柱 count+=1 hanoi(n-1,mid,dst,src)#把n-1个圆盘按照从小到大的顺序从中转柱移动到初始柱 hanoi(4,"A","B","C") print(count) ''' >>> 1:A-->C 2:A-->B 1:C-->B 3:A-->C 1:B-->A 2:B-->C 1:A-->C 4:A-->B 1:C-->B 2:C-->A 1:B-->A 3:C-->B 1:A-->C 2:A-->B 1:C-->B 15 '''
Pyinstaller库的使用
安装
1、win+r,输入:cmd 2、输入:pip install pyinstaller 
使用方法
1、打开命令窗口,进入源文件所在文件夹,输入打包指令 2、在项目所在文件夹中,同时按住鼠标右键和shift,在弹窗中点击在此处打开powershell窗口,在弹出的命令窗口中输入打包指令。 
指令
在dist文件夹中生成独立的打包文件:pyinstaller -F xxx.py 生成以xxx.ico为图标的独立打包文件:pyinstaller -i xxx.ico -F xxx.py
科赫雪花
分形几何
一种迭代的几何图形
科赫曲线绘制
科赫曲线:  def 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)
科赫雪花绘制
一阶科赫曲线绘制等边三角形:二阶科赫曲线绘制等边三角形:  三阶科赫曲线绘制等边三角形:五阶阶科赫曲线绘制等边三角形:  
六、 组合数据类型
集合类型:  列表类型:  元组类型:  字典类型: 
集合类型及操作
集合类型定义
元素之间无序,不存在相同元素 元素不可更改 用{}表示,元素间用逗号分隔 使用{}或set()建立集合,空集合只能使用set()生成,因为{}表示空的字典类型 建立空集合必须使用set()
集合操作符
S|T:并
S和T中的所有元素
S-T:差
在S中但不在T中的元素
S&T:交
既在S中又在T中的元素
S^T:补
S和T中的不同元素
S<=T或S<T:子集
S是T的子集则为真,反之为假
S>=T或S>T:包含
S包含T则为真,反之则为假
集合处理方法
S.add(x)
如果x不在S中,将x增加到S
S.discard(x)
移除S中的x元素,如果x不在集合S中,不报错
S.remove(x)
移除S中的元素x,如果x不在集合S中,产生KeyError异常
S.clear()
移除S中所有元素
S,pop()
随机返回S的一个元素,更新S,若S为空产生KeyError异常
S.coyp()
返回集合S的一个副本
len(S)
返回集合S的元素个数
x in S
元素x在S中返回True,否则返回False
x not in S
元素x不在S中返回True,反之返回False
set(x)
将其他类型的变量x转变为集合类型
集合类型应用场景
包含关系比较
数据去重
序列类型及操作
序列类型定义
序列是一维元素向量,元素类型可以不同 元素间由序号引导,通过下标访问序列的特定元素 序列是一个基类类型,包括:字符串类型、元组类型、列表类型 序号定义正反向皆可
序列处理函数及方法
x in s
x是序列s的元素,返回TRUE,否则返回False
x not in s
x是序列s的元素,返回False,否则返回True
s+t
连接两个序列s和t
s*n或n*s
将序列s复制n次
s[i]
返回s中的第i个元素
s[i:j:k]
切片,返回序列s中第i到j以k为步长的元素子序列。 s[::-1]:将s序列逆向输出
通用操作
len(s)
序列s的元素个数 ls=[“python",123,".io"] len(ls) >>>3
min(s)
序列s的最小元素
max(s)
序列s的最大元素 s="python123.io" max(s) >>>'y'
s.index(x)或s.index(x,i,j)
序列s从i到j位置中第一次出现元素x的位置
s.count(x)
序列s中出现x的总次数
元组类型及操作
元组是序列类型的一种扩展
元组类型定义
元组是一种序列类型 一旦创建就不能被修改 使用()或tuple()创建,元素间用逗号分隔 可以使用或不使用()
元组继承了序列类型的全部通用操作
列表类型及操作
列表是序列类型的一种扩展
列表类型定义
列表式一种序列,创建后可随意修改 使用[]或list()创建,元素间用逗号分隔 列表中各元素类型可以不同,无长度限制
列表类型操作函数
ls[i]=x
替换列表ls第i元素为x
ls[i:j:k]=lt
用列表lt替换ls切片对应元素子列表 ls=["cat","dog","tiger",1024] ls[1:2]=[1,2,3,4] >>>['cat',1,2,3,4,'tiger',1024] del ls[::3] >>>[1,2,4,'tiger'] ls*2 [1,2,4,'tiger',1,2,4,'tiger']
del ls[i]
删除列表ls中第i元素
del ls[i:j:k]
删除切片元素
ls+=lt
将列表lt元素增加到ls中
ls*=n
将ls列表元素重复n次
ls.append(x)
列表最后增加元素x
ls.clear()
删除列表中的所有元素
ls.copy()
将ls中的所有元素赋予新列表
ls.insert(i,x)
在第i位置插入元素x
ls.pop(i)
取出并删除第i位置元素
ls.remove(x)
删除列表中的第一个x元素
ls.reverse()
列表元素反转
序列类型应用场景
数据表示
元组
列表
元素遍历
数据保护:元组
基本统计值计算
获取不定长度的输入
def getNum(): #获取用户不定长度的输入 nums = [] iNumStr = input("请输入数字(回车退出): ") while iNumStr != "": nums.append(eval(iNumStr)) iNumStr = input("请输入数字(回车退出): ") return nums
计算平均值
def mean(numbers): #计算平均值 s = 0.0 for num in numbers: s = s + num return s / len(numbers)
计算中位数
def median(numbers): #计算中位数 sorted(numbers) size = len(numbers) if size % 2 == 0: med = (numbers[size//2-1] + numbers[size//2])/2 else: med = numbers[size//2] return med
字典类型及操作
字典类型定义
序列VS字典: 序列类型由0......N整数作为数据的默认索引, 字典类型则由用户为数据定义索引 字典类型定义: 采用{}和dict()创建,键值对用冒号表示,键值对之间用逗号分隔 {键1:值1,键2:值2,......,键n:值n} 
字典处理函数及方法
del d[k]
删除字典d中键k对应的数据值
k in d
k键在字典d中,返回TRUE,否则False
d.keys()
返回字典d中所有的键
d.values()
返回字典中所有的值
d.items()
返回字典中所有的键值对 
d.get(k,<default>)
键k存在,返回对应值; 不存在,返回default值。
d.pop(k,<default>)
键k存在,取出对应值; 不存在,返回default值。
d.popitem()
从字典中随机取出一个键值对,以元组形式返回
d.clear()
清空字典d
len(d)
返回字典d中键值对的个数 >>> d={"中国":"北京","美国":"华盛顿","法国":"巴黎"} >>> d.get("中国","无") >>> d.get("中国","无") '北京' >>> d.get("俄罗斯","无") '无' >>> d.popitem() ('法国', '巴黎') >>> d {'中国': '北京', '美国': '华盛顿'}
字典类型应用场景
统计数据出现的次数
数据是键,次数是值
元素遍历
jieba库的使用
jieba库基本介绍
根据字与字之间的关联程度,将中文语句拆为各个词语
jieba库的安装
pip install jieba
三种模式
jieba.lcut(s)
精确模式,返回一个列表的分词结果 
jieba.lcut(s,cut_all=True)
全模式,返回一个列表的分词结果,存在冗余 
jieba.lcut_for_search(s)
搜索引擎模式,返回一个列表的分词结果,存在冗余 
向字典增加新词
jieba.add_word(w) >>>jieba.add_word("蟒蛇语言")
文本词频统计
英文文本

中文文本

七、 文件和数据格式化
文件的使用
文件的类型
文本文件
.txt文件、.py文件
二进制文件
.png文件、.avi文件
文件的打开和关闭
<变量名>=open(<文件名>,<打开模式>
<文件名>: 文件路径和名称,源文件同目录直接输文件名 输入路径时需将\改为/,例如:F:\python\代码库\hamlet.txt→F:/python/代码库/hamlet.txt <打开模式>:  
变量名.close()
文件内容的读取
f.read(size)
默认读入全部内容,给出参数则读入前size长度
f.readline(size)
默认读入一行内容,给出参数则读入该行前size长度
f.readlines(hint)
默认读入所有行,一行为一个元素,组成一个列表 给出参数,读入前hint行
数据的文件写入
f.write(s)
写入一个字符串或字节流
f.writelines(lines)
写入一个元素均为字符串的列表
f.seek(offset)
改变当前文件操作指针的位置 offset: 0:开头 1:当前位置 2:结尾
自动轨迹绘制
自动化思维
数据和功能分离
接口文件
程序和数据之间的一种规范,用于解析数据文件
数据文件
以接口文件定义的格式存储的数据
代码

一维数据的格式化和处理
一维数据的表示
有序:列表
无序:集合
一维数据的存储
空格分隔
逗号分隔
其他方式
一维数据的处理
读数据
从空格分隔的文件中读入数据 中国 美国 日本 德国 法国 英国 意大利 txt=open(f.txt) ls=txt.split() f.close() 从特殊符号分隔的文件中读入数据 中国$美国$日本$德国$法国$英国$意大利 txt=open(f.txt) ls=txt.split("$") f.close()
写数据
采用空格分隔方式将数据写入文件 ls=['中国','美国','日本'] f=open(f.txt,'w') f.write(' '.join(ls) f.close() 采用特殊符号分隔方式将数据写入文件 ls=['中国','美国','日本'] f=open(f.txt,'w') f.write('$'.join(ls) f.close()
二维数据的格式化和处理
二维数据的表示
二维列表
CSV格式与二维数据存储
CSV数据存储格式
国际通用的一二维数据存储格式,扩展名为.csv CSV:Comma-Separated Values,采用逗号分隔 每行一个一维数据 如果某个元素缺失,逗号仍要保留
二维数据的存储
按行存或者按列存都可以 索引习惯为先行后列:ls[row][column] 根据一般习惯,外层列表每个元素是一行
二维数据的处理
读数据
从CSV格式的文件中读入数据 fo=open(f.txt) 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 colum in row: print(colum)
wordcloud库的使用
wordcloud库概述
优秀的词云展示第三方库
wordcloud库的安装
pip install wordcloud
wordcloud库使用
配置对象参数:w=wordcloud.WordCloud()
width:生成词云图片的宽度,默认400像素 height:生成词云图片的高度,默认200像素 min_font_size:词云中的最小字号,默认4号 max_font_size:词云中的最大字号,根据高度自动调节 font_step:词云中字号的步进间隔,默认为1 font_path:字体文件的途径,默认None max_words:词云显示的最大单词数量,默认200 stop_words:词云中不显示的单词列表 mask:词云形状,默认长方形 background_color:词云图片背景色,默认黑色
加载词云文本:w.generate()
输出词云文件:w.to_file()
wordcloud库的功能
1、分隔:以空格分隔单词 2、统计:统计单词出现次数并过滤 3、字体:根据统计配置自豪 4、布局:颜色环境尺寸
政府工作报告词云

八、 程序设计方法学
体育竞技分析
自顶向下(设计)
将一个总问题表达为若干个小问题
自底向上(执行)
分单元测试,逐步组装
体育竞技分析
def main(): printIntro() probA,probB,n=getInputs() winsA,winsB=simNGames(n,probA,probB) printSummary(winsA,winsB)
打印程序的介绍性信息
def printIntro(): print("本程序用于模拟选手A和B的某种竞技比赛") print("程序运行需要输入A和B的能力值,以0到1之间的小数表示")
获得程序运行参数:ProA、ProB,n
def getInputs(): a=eval(input("输入选手A的能力值:")) b=eval(input("输入选手B的能力值:")) n=eval(input("模拟比赛的场次:")) return a, b, n
利用球员A和B的能力值模拟n局比赛
一局比赛中胜负的判定
def gameOver(a,b): #当A或B积够15分时一局比赛结束 return a==15 or b==15 def simOneGame(probA,probB): #判断一局比赛的胜负 scoreA, scoreB = 0, 0 serving = "A" while not gameOver(scoreA,scoreB):#random.random()生成[0,1)的随机数,A、B的能力值均大于该随机数时同时加1分,一大于一小于则大于的加1分 if serving == "A": if random() < probA: scoreA += 1 else: serving = "B" else: if random() < probB: scoreB += 1 else: serving = "A" return scoreA, scoreB
n局比赛中A、B分别胜利的局数
def simNGames(n,probA,probB):#统计A、B胜利的局数 winsA, winsB = 0, 0 for i in range(n): scoreA, scoreB=simOneGame(probA, probB) if scoreA > scoreB: winsA += 1 else: winsB += 1 return winsA,winsB
输出球员A和B获胜比赛的场次和概率
def printSummary(winsA,winsB): n = winsA+winsB print("共模拟{}场比赛".format(n)) print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA,winsA/n)) print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB,winsB/n))
Python程序设计思维
计算思维与程序设计
三种思维模式
逻辑思维
推理和演绎,以数学为代表
实证思维
实验和验证,以物理为代表
计算思维
设计和构造,以计算机为代表
例子
计数求和
逻辑思维: S=(a1+an)*n/2 计算思维: s=0 for i in range(1,101): s+=1
圆周率的计算
逻辑思维:  计算思维: 
汉诺塔问题
逻辑思维: 2^n-1 计算思维: count=0 def hanoi(n,src,dst,mid):#把n个圆盘按照从小到大的顺序从初始柱移动到目标柱 global count if n==1: print("{}:{}-->{}".format(1,src,dst)) count+=1 else: hanoi(n-1,src,mid,dst)#把n-1个圆盘按照从小到大的顺序从初始柱移动到中转柱 print("{}:{}-->{}".format(n,src,dst))#把第n个圆盘从初始柱移动到目标柱 count+=1 hanoi(n-1,mid,dst,src)#把n-1个圆盘按照从小到大的顺序从中转柱移动到初始柱 hanoi(4,"A","B","C") print(count)
天气预报
实证思维+逻辑思维: 经验+猜 计算思维: MM5模型
编程是将计算思维变成现实的手段
计算生态与Python语言
计算生态
大教堂模式
1983, Richard Stallman启动GNU项目 专业人士编写,但反软件版权,提倡软件自由
集市模式
1991, Linus Torvalds发布了Linux内核 所有人都可以参与软件的编写和完善
Python
大量的第三方库
库在不断更新和迭代
社区庞大
编程是利用计算生态快速解决问题
用户体验与软件产品
进度展示
异常处理
基本的程序设计模式
IPO
Input、Process、Output
自顶向下设计
模块化设计
配置化设计
程序引擎+配置文件
应用开发的四个步骤
1. 产品定义
2. 系统架构
3. 设计与实现
4. 用户体验
Python第三方库安装
Python社区
超过13万个第三方库
安装第三方库的方法
pip指令
python -m pip install --upgrade pip
pip安装工具的升级
pip install <第三方库名称>
安装第三方库
pip install -U <第三方库名>
更新第三方库
pip uninstall <第三方库名>
卸载第三方库
pip download <第三方库名>
下载但不安装第三方库
pip show <第三方库名>
列出第三方库的详细信息
pip search <关键词>
根据关键词在名称和介绍中搜索第三方库
pip list
列出当前系统已经安装的第三方库
集成安装:anaconda
支持800多个第三方库 包含多个主流工具 适合数据计算领域开发
文件安装
一些第三方库pip可以下载但无法安装,这是因为其未编译,此时需要在http://www.lfd.uci.edu/~gohlke/pythonlibs/下载其编译后的版本,然后使用pip指令安装。
os库的使用
os库基本介绍
提供通用的、基本的操作系统交互功能 常用功能:路径操作、进程管理、环境参数
路径操作
os.path字库,处理文件路径及信息 import os.path
os.path.abspath()
对给定文件名前加上当前工作目录的绝对路径,并不是显示给定文件的所在路径 
os.path.normpath()
路径格式规范化 
os.path.relpath()
相对路径 
os.path.dirname()
返回文件所属目录 
os.path.basename()
返回文件名称 
os.path.join(path,paths)
路径合并,第一个路径必须以规范形式输入,否则会报错 
os.path.exists()
判断文件或目录是否存在,存在返回True,不存在返回False 
os.path.isfile()
判断文件是否存在,存在返回True,不存在返回False
os.path.isdir()
判断目录是否存在,存在返回True,不存在返回False
os.path.getatime()
返回文件或目录上一次访问的时间,以浮点形式表示 
os.path.getmtime()
返回文件或目录最近一次修改的时间,以浮点形式表示 
os.path.getctime()
返回文件或目录的创建时间,以浮点形式表示 
os.path.getsize()
返回文件的大小,以字节为单位表示 
进程管理
启动系统中其他程序
启动程序
系统程序:直接输入程序名称即可 计算器:os.system("calc.exe") 画图:os.system("mspaint") 第三方程序:需输入完整的路径 有道词典:os.system(r'"C:\Program Files (x86)\Youdao\Dict\YoudaoDict.exe"') 加r''是因为路径字符串中有空格
启动程序并打开文件
使用画图打开文件fivestar os.system("mspaint.exe F:\\python\\Python语言程序设计\\fivestar.png")
环境参数
获得系统软硬件信息等环境参数
os.chdir()
修改当前程序操作的路径
os.getcwd()
返回程序的当前路径
os.getlogin()
获得当前系统用户名称
os.cup_count()
返回当前系统的CPU数量
os.urandom(n)
获得n个字节长度的随机字符串,常用于加解密运算
第三方库自动安装脚本

九、 Python计算生态概览
从数据处理到人工智能
数据分析
numpy
表达N维数组的最基础库 提供直接的矩阵运算、广播函数、线性代数等功能
pandas
数据分析高层次应用库
scipy
数学、科学和工程计算功能库 类似matlab,可用于傅里叶变换、信号处理等应用
数据可视化
matplotlib
二维数据可视化
seaborn
统计类数据可视化
mayavi
三维数据可视化
文本处理
PyPDF2
处理pdf文件的工具集 包括获取信息、分隔/整合文件、加密解密等
nltk
自然语言文本处理
docx
创建或更新word文件
机器学习
scikit-learn肩负基本的数据清理任务,keras用于对问题进行小规模实验验证想法,TensorFlow用于在完整的数据上调参。
Scikit-learn
机器学习方法工具集 通用机器学习库 传统机器学习:利用特征工程,认为对数据进行提炼清洗 主要适用于中小型的、实用机器学习项目,尤其是数据量不大且需要使用者手动对数据进行处理,并选择合适模型的项目,这类项目往往在CPU上就可以完成,对硬件要求低。
TensorFlow
AlphaGo背后的机器学习计算框架 深度学习库 深度学习:模型自身对数据进行提炼 主要适合已经明确需要深度学习,且数据处理需求不高的项目,这类项目往往数据量较大,需要高精度,一般需要GPU加速运算
MXNet
基于神经网络的深度学习计算框架
从Web解析到网络空间
网络爬虫
requests
最友好的网络爬虫功能库
scrapy
优秀的网络爬虫框架
pyspider
强大的Web页面爬取系统
Web信息提取
Beautiful Soup
HTML和XML解析库
Re
正则表达式解析和处理功能库
Python-Goose
提取文章类型Web页面的功能库
Web网站开发
Django
最流行的Web应用框架
Pyramid
规模适中的Web应用框架
Flask
Web应用开发微框架
网络应用开发
WeRoBot
微信公众号开发框架
aip
百度AI开放平台接口
MyQR
二维码生成
从人机交互到艺术设计
图形用户界面
PyQt5
Qt开发框架的Python接口
wxPython
跨平台GUI开发框架
PyGObject
使用GTK+开发GUI的功能库
游戏开发
PyGame
简单的游戏开发功能库
Panda3D
开源、跨平台的3D渲染和游戏开发库
cocos2d
构建2D游戏和图形界面交互式应用的框架
虚拟现实
VR Zero
在树莓派上开发VR应用的Python库
pyovr
Oculus Rift的Python开发接口
Vizard
基于Python的通用VR开发引擎
图形艺术
Quads
图片像素化
ascii_art
图片以ASCII的形式显示
turtle
十、 Python语法的三个阶段
基础语法:函数式编程
进阶语法:面向对象编程
高级语法:Pythonic编程
十一、 特殊函数
map((func, *iterables)
map函数是内嵌函数,不需要import就可使用 将第一个参数的功能作用于第二个参数的每一个元素 第一个参数是函数名称,第二个参数是迭代类型 对一个列表或者一个集合的每一个元素都执行一次第一个参数所对应的函数 典型用法: list(map(list(map(eval,ls))) map函数输出的结果是map类型,因此需要使用list函数转化为列表类型