MOOC python
配套纯原创,转载请注明出处
C1、温度转换示例
 
#温度转换 tempstr = input("请输入带符号的温度值: ") if tempstr[-1] in ['f','F']: C=(eval(tempstr[0:-1])-32)/1.8 print("{:.2f}C".format(C)) elif tempstr[-1] in ['C','c']: F=eval(tempstr[0:-1])*1.8 + 32 print("{:.2f}F".format(F)) else : print ("格式错误")
C2、turtle库图形绘制
 
#pythondraw.py #具体见课程介绍,看三节约5min https://www.icourse163.org/learn/BIT-268001?tid=1206073223#/learn/content?type=detail&id=1210530388&cid=1212669666&replay=true import turtle turtle.setup(650,350,200,200) #turtle.setup(width,height,startx,starty) 后两项可选,为窗口左上角坐标 turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40) for i in range(4): turtle.circle(40,80) turtle.circle(-40,80) turtle.circle(40,80/2) turtle.fd(40) turtle.circle(16,180) turtle.fd(40 * 2/3) turtle.done()
1. 海龟绘图体系:turtle库简单应用
1.1坐标体系
turtle.setup(width, heigh, startx, starty) #x,y 是窗口左上角坐标,省略为居中
turtle.goto(x,y)
turtle 默认在窗口中央,坐标为(0,0)
1.2海龟视角
turtle.fd(d)//向前 turtle.bk(d)//向后 turtle.circle(r,angle)//
turtle.seth(angle) // 设置海龟行进角度(绝对角度)
turtle.left(angle) turtle.right(angle) // 相对角度
1.3 turtle.penup() turtle.pendown() // 起落笔
turtle.pencolor("purple") turtle.pensize(25) // 笔画粗细
turtle.done( ) // 停留需手动关闭窗口,若自动关闭则去了即可
2. RGB色彩体系
3. import用法
1, import turtle // turtle.fd(250) 2, form turtle import * // fd(250)
3, import turtle as t // t.fd(250)
4. 循环语句
4.1 遍历循环:
for <循环变量> in <遍历结构>
<语句块>
-每次循环,所获得元素放入循环变量,并执行一次语句块。
-完整遍历所有元素后结束,下面是常用搭配。
4.1.1 for <循环变量> in range (<参数>) //循环变量:表示循环计数(0 ~ n-1)
<循环体> //参数:循环次数
4.1.2 range( ) 函数:产生序列
range (5) 产生:0,1,2,3,4
range(2,5) 产生 : 2,3,4
range(1,6,2)产生:1,3,5 //2为步长
4.1.3 字符串循环:
for c in s : #s是字符串,遍历其每个字符给c,产生循环。
<语句块>
4.1.4 列表遍历循环:
for item in ls : #ls 是一个列表,遍历每一个元素给item,产生循环。
<语句块>
for item in [123,"py",456] :
print(item,end=",")
# output : 123,py,456,
4.1.5 文件遍历循环:
for line in fi : #循环输出文件的每一行
print(line)
4.2 无限循环:
while <条件> :
<语句块>
4.3 break:跳出并结束当前循环,执行循环后的语句
continue: 结束当次循环,继续执行后续次数循环
4.4 循环 & else
循环后加一个else语句可看作循环正常执行完的 “奖励语句” ,如果循环直到结束都没有碰到 break 而强制退出,则执行接下来的else语句。
while <条件> :
<语句块1>
else :
<语句块2>
C3、数字类型操作
1. 整数类型无限范围及4种进制表示:0x,0d,0o,0b。
2. 浮点类型近似无限范围、小数位数及科学计数法。
0.1+0.2==0.3 False
round(0.1+0.2)==0.3 Ture
round(x [,d]) : 对x进行四舍五入,保留d位小数,不加d为取整
3. +、-、*、/、//、%、**、及其增强操作符
4. 函数:abs()divmod()pow(x, y [,z]),round()max()min()
强制类型转换:int("123")float()complex()
C4、控制结构
 
#BMI.py height,weight=eval(input("输入身高m体重kg(逗号隔开):")) bmi=weight/pow(height,2) print ("BMI is {:.2f}".format(bmi)) who,nat="","" if bmi < 18.5: who,nat="偏瘦","偏瘦" elif 18.5<=bmi<24: who,nat="正常","正常" elif 24<=bmi<25: who,nat="正常","偏胖" elif 25<=bmi<28: who,nat="正常","偏胖" elif 28<=bmi<30: who,nat="偏胖","肥胖" else : who,nat="肥胖","肥胖" print("BMI : 国标'{}',国内'{}'".format(who,nat))
1. if else elif
1)if < 条件>: 2)<表达式1> if <条件> else <表达式2>
<语句块1> 如果条件为true执行表达式1否则执行表达式2
else : 注意此处只能放表达式而不能是语句,不能有‘=’
< 语句块2 >
2 字符串format填充函数
"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序 'hello world'
"{1} {0} {1}".format("hello", "world") # 设置指定位置 'world hello world'
print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))
3. 与或非:x and y x or y not x
4. 异常处理
1) try : #例 : try :
     <语句块1>                   num=eval(input("请输入一整数"))
except : print(num**2)
     <语句块2>               except :
执行语句块1,如果出错执行语句块2 print("输入非整数")
2) try :
<语句块1>
except <异常类型1>:
<语句块2>
执行语句块1,如果出错且出错类型为异常类型1则执行语句块2
C5、字符串操作
5.1字符串切片
  -字符串[开始索引:结束索引:步长]
  -切取字符串为开始索引到结束索引-1内的字符串
  -步长不指定时步长为1 字符串[开始索引:结束索引]
例1:s="hikvision" #把第五个字符后面的字符串全扔掉,
s=s[ : 5 ] #此时s=“hikvi”, s[:9]=s[:-1]="hikvisio"
例2:s[: : -1] #将s字符串从开始到结束采用-1为步长输出,即字符串反转。
5.2字符串常用函数
+ * len() str() oct() ord() chr()
.lower() .upper() .count()
.center() .strip() .format()
.replace():把字符串中的 旧字符串替换成新字符串,若指定第三个参数max,则替换不超过 max 次。格式:str.replace(old, new[, max])
.split():通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串,返回分割后的字符串列表。
格式:str.split(str="", num=string.count(str))
.join():用于将序列中的元素以指定的字符连接生成一个新的字符串。返回通过指定字符连接序列中元素后生成的新字符串。
格式:str.join(sequence) #sequence -- 要连接的元素序列。
例:str = "-";
  seq = ("a", "b", "c"); # 字符串序列
  print str.join( seq );得:a-b-c
C6、random库使用
 
#蒙地卡罗求pi法 from random import random #仅导入库中random一个函数 from time import perf_counter DARTS=10000*10000#飞镖个数 hits=0.0 start=perf_counter()#当前系统时间,表示计时开始 for i in range(DARTS+1): x,y=random(),random() dist=pow(x**2+y**2,0.5) if dist<=1.0: hits+=1 pi=4*(hits/DARTS) print ("pi={}".format(pi)) print ("运行时间:{}".format(perf_counter()-start))
Ps:善用perf_counter()-start来查看某段代码运行时间。
6.1.基本随机数(伪)函数:
seed( ): 初始化随机种子,random.seed(10) #以种子10对应的随机序列
种子相同,产生随机数序列也相同,若不用此函数,默认种子为当前时间(微秒级)。
random( ): 生成一个[0,1)之间的随机小数
>>>random.random( ) #0.87463423472983423
6.2.扩展随机数函数:
randint(a,b):产生[a,b]之间的整数。>>>random.randint(10,100)
getrandbits(k): 产生一个k比特长的随机整数
uniform(a,b): 产生一个[a,b]之间的随机小数 #浮点数有16位精度,故产生16位小数。
choice(seq): 从序列seq中随机选择一个元素。>>>random.choice([1,2,3,4,5])
shuffle(seq): 打乱seq排列,并返回之
C7、函数&代码复用
7.1.定义方式:函数自def始,至return终
7.1.1 def <函数名> (<参数>): or def <函数名> (<参数>,<可选参数>):
<函数体> <函数体>
return<返回值> return<返回值>
调用:a= fact(10) 、 a=fact(10,5)、 a=fact(m=5,n=10).
位置对应和名称对应都可
 
def fact(n,m=1) s=1 for i in range(1,n+1) s*=i return s // m #若不设m,默认m=1,返回n!,设返回n!整除m
也可用return返回多个值,如上例改成 return s//m ,n , m
则fact(10, 5)会返回元组:(725760,10,5)
如 :a,b,c = fact(10,5 )这样赋值也是合法的
7.1.2 不确定数量参数传递
def <函数名> (<参数1>, *b) : #参数1是必有的参数,b为其余不确定参数
<函数体>
return<返回值>
7.2. 局部变量和全局变量(区别:函数内部使用&全局使用)
7.2.1 规则:
-局部变量是函数内部占位符,可与全局变量重名但不相同。
-函数运算结束后,局部变量被释放。
-可使用 global 关键字再函数内部使用全局变量。
-局部变量为 ①组合数据类型 且 ②不是在函数内部定义的,则它等同全局变量。
 
n,s=10,100 def fact(n) : global s #此s为全局s,它改外部s也改 s*=i return s print(fact(n),s) #1000,1000
7.3. lambda函数(匿名函数)
一种定义函数的简单方式,常用于定义某些参数,一般用 def-return 形式。
用例:
>>> f = lambda x , y : x+y #函数名:f 参数:x,y 表达式:x+y
>>>f(10 , 15)
25
>>>f = lambda : "lambda 函数" #也可以没有参数
>>>print (f())
lambda函数
7.4.实例:七段数码管绘制
step:
1-绘制单个数字对应数码管
原理:数码管‘8’可由一笔化成,控制pen的起落,可画all。
2-获得一串数字,绘制其对应的数码管
3-获取当前系统时间,绘制对应数码管
 
import turtle def drawLine(draw): #绘制单段数码管 turtle.pendown() if draw else turtle.penup() turtle.fd(40) turtle.right(90) def drawDigit(digit):#根据数字绘制数码管 drawLine(1) if digit in [2,3,4,5,6,8,9] else drawLine(0) #第1笔 drawLine(1) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(0)#第2笔 drawLine(1) if digit in [0,2,3,5,6,8,9] else drawLine(0) #第3笔 drawLine(1) if digit in [0,2,6,8] else drawLine(0) #第4笔 turtle.left(90) drawLine(1) if digit in [0,4,5,6,8,9] else drawLine(0) #第5笔 drawLine(1) if digit in [0,2,3,5,6,7,8,9] else drawLine(0) #第6笔 drawLine(1) if digit in [0,1,2,3,4,7,8,9] else drawLine(0) #第7笔 turtle.left(180) #归位乌龟方向 turtle.penup() turtle.fd(20) def drawData(data): #转字符串为数字并调用drawDigit画出 for i in data: drawDigit(eval(i)) def main(): turtle.penup() turtle.fd(-300) turtle.pensize(5) drawData("20210817") turtle.done() main()#运行
 
import turtle import datetime curr_time=datetime.datetime.now() time_str = datetime.datetime.strftime(curr_time,'%Y%m%d')#指定输出格式并转成字符串类型 def drawLine(draw): #绘制单段数码管 turtle.penup() turtle.fd(5) #分段显示 turtle.pendown() if draw else turtle.penup() turtle.fd(35) turtle.penup() turtle.fd(5) #分段显示 turtle.right(90) def drawDigit(digit):#根据数字绘制数码管 drawLine(1) if digit in [2,3,4,5,6,8,9] else drawLine(0) #第1笔 drawLine(1) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(0)#第2笔 drawLine(1) if digit in [0,2,3,5,6,8,9] else drawLine(0) #第3笔 drawLine(1) if digit in [0,2,6,8] else drawLine(0) #第4笔 turtle.left(90) drawLine(1) if digit in [0,4,5,6,8,9] else drawLine(0) #第5笔 drawLine(1) if digit in [0,2,3,5,6,7,8,9] else drawLine(0) #第6笔 drawLine(1) if digit in [0,1,2,3,4,7,8,9] else drawLine(0) #第7笔 turtle.left(180) #归位乌龟方向 turtle.penup() turtle.fd(20) def drawData(data): #转字符串为数字并调用drawDigit画出 for i in data: drawDigit(eval(i)) def main(): turtle.penup() turtle.fd(-300) turtle.pensize(5) drawData(time_str) turtle.done() main()#运行 数码管绘制
总结:函数降低编码方式:模块化思维,大功能化小功能,分而治之。
7.5.代码复用&函数递归
7.5.1 代码复用(模块化)思想
紧耦合:两部分之间交流很多,无法独立存在。
松耦合:两部分之间交流较少,可以独立存在。
函数的输入参数与返回值即其与其他代码交流通道,通道越少则越清晰,复用的可能性就越高。故希望模块内部紧耦合,便于传输;模块之间松耦合,提高复用。
7.5.2 递归:函数定义中调用函数自身。
-思想:函数+分支
-链条:计算过程中存在递归链条。
-基例:存在一个或多个不需递归的基础例子。
-实际上执行递归操作时python在不断地开辟内存给链条,执行到基例才一并返回。我们只关心从 n 到 n-1 该怎么实现,从n-1到基例我们不关心。
7.6 PyInstaller 库基本介绍
作用:将.py源代码转换成无需源代码的可执行文件(在没有python解释器环境下也能运行)
Pyinstaller是一个第三方库(解释器安装过程中并不预先安装的库),需要pip安装之。
在cmd命令行下输入 : pyinstaller -F <文件名.py> 则会在目录下生成.exe可执行文件
7.7 实例:科赫雪花小包裹
7.7.1:科赫曲线:将一段直线“---”变成“ -^- ”称为一次科赫变换。科赫雪花将三条科赫曲线 拼接一起即可。
 
import turtle 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) #对1/3长度进行n-1阶科赫化 def main(): turtle.speed(0) turtle.setup(800,400) turtle.penup() turtle.goto(-300,-50) turtle.pendown() turtle.pensize(3) koch(600,4) turtle.hideturtle() main()
 
import turtle 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) #对1/3长度进行n-1阶科赫化 def main(): turtle.speed(0)#设置绘制速度最快 turtle.setup(1000,1000,100,0) turtle.penup() turtle.goto(-350,175) turtle.pendown() turtle.pensize(1) koch(600,3) turtle.right(120) koch(600,3) turtle.right(120) koch(600,3) turtle.hideturtle() main()
7.7.2:利用Pyinstaller打包雪花绘制小程序(8.24上班弄)
pip install Pyinstaller后,准备一个.ico的图标文件,cmd中
7.7.3 科特雪花举一反三
C8、 组合数据类型(用恰当的类型表达一组数据以便操作)
 
- 8.1 集合类型及操作 - 8.2 序列类型及操作(元组&列表) - 8.3 实例9: 基本统计值计算 - 8.4 字典类型及操作 - 8.5 模块5: jieba库的使用 - 8.6 实例10: 文本词频统计
8.1集合类型及操作
8.1.1集合定义
-集合类型于数学集合概念一致
-集合元素 无序,唯一,为不可变数据类型(如整数,复数,字符串,元组类型等)
-集合用{}表示,中间逗号分隔。
-建立集合用set()或{},空集合必须用set()
>>>A={"python",123,("python",123)} #使用{}建立集合
>>>B=set{"pypy123"} #使用set建立集合得{'1','p','2','3','y'}
>>>C={"python",123,"python",123} #得{"python",123},自动去重复
8.1.2集合操作
1)操作符:
S|T 并集 S,T中都有元素
S-T 差集 S有T没有
S&T 交集 S,T都有
S^T 补集 S,T中非相同元素
S<=T/S<T 判断S,T的子集关系,返回bool值
S>=T/S>T 判断S,T的包含关系,返回bool值
PS:提供增强操作符以修改原有集合
2) 操作函数
S.add(x) 若 x 不在S中,增加x至S
S.discard(x) 移除S中x元素,若x不在S中不报错
S.remove(x) 同上,但x不在S中产生KeyError异常(可用try捕捉)
S.clear() 清空S
S.pop() 随机取出一个元素,并更新S,若S为空,返回KeyError异常
S.copy() 返回S的副本
len(S) 返回S元素个数
x in S/x not in S 判断x是否在S中,返回bool值
8.1.3 集合应用场景
1.数据去重
>>>ls = ['p','p','y','y','y',123]
>>>s=set(ls)
{'p','y',123}
>>>lt = list(s) # 列表去重
['p','y',123]
2.包含关系的比较
8.2序列类型及操作
8.2.1序列定义
-序列是具有先后关系的一组元素,元素类型可不相同
-可由下标访问特定元素
-是基类类型(字符串,元组,列表类型都是序列类型衍生)
8.2.2序列操作
1)6个操作符
x in s/ x not in s 返回bool值
s + t 链接两序列
s*n 将序列s复制n次
s [i] 返回s中第i给元素
s[ i : j [: k] ] 切片,返回序列s中第i到j以k为步长的元素子序列,k=1默认
2)5个函数方法
len(s) 返回s长度
min(s)/max(s) 当s同类型时,返回最值,否则报错
s.index(x [,i, j]) 返回序列s从 i 到 j 位置中第一次出现x的位置(下标)。
s.count(x) 返回x出现次数
8.3 元组类型及操作
定义:
-元组类型就是将元素进行有序排列
-元组是一种序列类型,一旦创建就不能修改
-使用 () 或tuple()创建,元素间用逗号分隔
-可以不用()也表示元组
操作:继承所有序列操作
应用场景:
-多用于固定搭配,元素不改变
-数据保护,定义后数据就不再改变
8.4列表类型及操作
定义:
-列表是一种序列类型,创建后可随意修改
-使用 [ ] 或 list() 创建
-若非创建列表而使用赋值 ls1= ls2,实际上并没有创建新列表,而是重命名ls1(指针)
操作:
ls[i] = x 替换 ls 第 i 元素为x
ls[i :j :k]=lt 用lt替换ls切片后所对应的子序列
del ls[i] 删除第i元素
del ls[i :j : k] 删除第 i 到第 j 以 k 为步长的元素
ls += lt 更新ls,将lt元素增加到ls中
ls *= n 更新ls,使其元素重复n次
函数:
ls.append(x) 在列表最后加一个元素x
ls.clear( ) 清空ls
ls.copy( ) 生成一个新列表,值为ls中元素
ls.insert(i,x) 在列表ls的第i位加新元素x
ls.pop(i) 将列表ls中第i位置元素取出并删除之
ls.remove(x) 将列表ls中出现的第一个元素x删除
ls.reverse( ) 反转列表
应用场景:最常用
实例9:基本统计值(总个数,求和,平均值,方差,中位数...)
8.5字典类型及操作
定义:
-映射:键(索引)和值(数据)的对应,字典是映射的体现
-字典是键值对的集合,键值对之间无序
-采用{ } 和dict()创建,键值对用:表示
-{<key>:<value>,<k>:<v>...<k>:<v>}
-生成空字典:de={}(前面说空集合不能用{ }生成,就是因为这个)
>>>d = {"中国":"北京","美国":"华盛顿","俄罗斯":"莫斯科"}
>>>d["中国"]
‘北京'
操作:
del d[k] 删除字典d中键k对应的数据值
k in d 判断键k是否在字典d中,返回bool
d.keys() 返回字典d中所有键信息
d.values() 返回字典d中所有值信息
d.items() 返回字典d所有键值对信息
d.get(k , <default>) 键k存在,返回其对应值,否则返回<defult>值
d.pop(k , <default>) 键k存在,取出其对应值,否则返回<defult>值
d.popitem() 随机从字典d中取一个键值对,以元组形式返回
d.clear() 清空字典d
len(d) 返回d中元素个数
8.6 jieba库的使用
-第三方中文分词库,根据中文组合概率为依据来对中文分词
-jieba分词三种模式:精确模式,全模式,搜索引擎模式
常用函数:
jeiba.lcut(s) 精确模式,返回一个列表的分词结果
>>>jieba.lcut("中国是一个伟大的国家")
['中国','是','一个','伟大','的','国家']
jieba.lcut(s,cut_all=Ture) 全模式,存在冗余
jieba.lcut_for_search(s) 搜索引擎模式,详百度之
jieba.add_word(w) 向分词词典加入新词
>>>jieba.add_word("海康威视")
8.7 实例10:文本词频统计(待)
C9、文件与数据格式化(会编写带文件输入输出的程序)
 
9.1 文件的使用 9.2 实例11:自动轨迹绘制 9.3 一维数据的格式化和处理 9.4 二维数据的格式化和处理 9.5 模块6:wordcloud库的使用 9.6 实例12:政府工作报告词云
9.1 文件的使用
9.1.1 文件的类型: 文本文件 & 二进制文件
ps:本质都是二进制文件,只是展示方式不同
 
#文本形式打开文件 tf = open("f.txt","rt",encoding="utf-8")#以文本/二进制格式(tr/tb)输出文件, #不说明编码格式会报错 print(tf.readline()) tf.close()
9.1.2 文件的操作步骤:打开-操作-关闭
通过open和close改变文件状态(储存状态 & 占用状态)
<变量名> = open(<文件名>, <打开模式>) #文件名包括文件路径和名称(源文件同目录可省略),打开模式为 读 OR 写
文件的打开模式:
  
f = open("f.txt") -默认值:文本模式&只读模式
f = open("f.txt", "rt") -同默认值
f = open("f.txt", "w") -文本覆盖写
f = open("f.txt", "a+") -文本追加写&读写文件
文件的关闭: <变量名>.close()
9.1.3 文件的读取
<f>.read(size = -1) 读入全部内容,若给出参数读入前size长度。
例:>>>s = f.read(2)
中国
<f>.readline(size = 1) 读入一行内容,如给出参数,读入该行(指针所指行)前size长度
例:>>>s = f.readline()
中国是一个伟大的国家
<f>.readlines(hint = -1) 读入文件所有行,以每行为元素形成列表,给出参数则读入前hint行
文件的遍历:
法一:一次读入,统一当字符串处理
1 fname = input("请输入要打开的文件:") 2 fo = open(fname, "r") 3 txt = fo.read() #对全文txt处理 4 fo.close()
法二:按数量读入逐步处理
1 fname = input ("请输入要打开的文件:") 2 fo = open(fname,"r") 3 txt = fo.read(2) #从文件中读入两个字节 4 while txt != "" : 5 txt = fo.read(2) #对txt进行处理 6 fo.close()
法三:逐行遍历文件1
1 fname = input("输入要打开的文件:") 2 fo = open(fname,"r") 3 for line in fo.readlines(): 4 print(line) 5 fo.close
9.1.4 数据文件的写入
<f>.write(s) 向文件写入字符串
>>>f.write("中国是一个伟大的国家")
<f>.writelines(lines) 将一个元素全为字符串的列表写入文件
>>>ls = ["中国", "法国", "美国"]
>>>f.writelines(ls) 中国法国美国 #PS:元素间直接拼接不换行
<f>.seek(offset) offset=0,1,2分别代表:指针指向0文件开头、1当前位置、2文件结尾
例子:
fo = open("output.txt", "w+") ls = ["zg","fg","mg"] fo.writelines(ls) fo.seek(0) #如果不加这一句,程序将什么都输出不来,因为写之后指针自 #动向后加一,处于最后面,读取会往后读取,故需置前指针。 for line in fo: print (line) fo.close()
9.2:实例11:自动轨迹绘制
与turtle不同:读取数据根据数据画出图形
读取文件---解析数据---绘制图形
step1:定义接口(数据挖掘格式,即一种规范)
如:300,0,144,1,0,0 (行进距离,左右转向,转向角度,线条颜色rgb)
 
#autoTraceDraw.py import turtle as t #初始化 t.title('自动轨迹绘制') t.setup(800,600,0,0) t.pencolor("red") t.pensize(5) #数据读取 datals = [] f = open("autoTraceDrawdata.txt") for line in f: #这里拿到的是字符串 line = line.replace("\n","") datals.append(list(map(eval,line.split(",")))) #split:通过指定分隔符对字符串进行切片,这里是通过","分割,返回的是字符串列表 #map:把第二个参数的所有元素都执行一次第一个参数所对应的函数。 #故line由 字符串—>拆分并变换成列表—>数值—>数值列表—>拼接到datals f.close() #解析数据,自动绘制 for i in range(len(datals)): t,t.pencolor(datals[i][3],datals[i][4],datals[i][5]) t.fd(datals[i][0]) if datals[i][1]: t.right(datals[i][2]) else: t.left(datals[1][2])
举一反三:
-数据与功能分离,数据驱动的自动运行
-接口化设计
-应用维度组织数据,二维为最常用
9.3 一维数据的格式化和处理
数据三阶段:存储(空格或者特殊字符分开)--表示--操作(即算法)
9.3.1 一维数据的表示:列表(最常用),集合(无序数据)
#一维数据的读入处理:将数据处理成列表 #如:中国 美国 英国 法国 俄国 #以空格分隔 txt = open(fname).read() ls = txt.split() f.close() >>>ls ['中国','美国','英国','法国','俄国',]
#采用空格方式将数据写入文件 ls = ['中国','日本','韩国'] f = open(fname,'w') f.write(' '.join(ls)) #join:将join前面的字符串分隔放置到join后面参数的各个元素之间。 f.close()
9.4二维数据的格式化和处理
9.4.1 二维数据的表示:统统使用二维列表:其每个元素都是一个列表
-CSV数据:国际通用的一、二维数据存储格式,文件以 .csv后缀
每行一个一维数据,采用逗号分隔,无空行,不同行即不同维度
excel和一般软件都可读入或另存为csv文件。
9.4.2 二维数据的处理
#1、从csv格式文件中读入数据 fo = open(fname) ls = [] for line in fo : line = line.replace("\n","") ls.append(line.split(","))#将元素按逗号分割开形成列表,并加入ls列表中 fo.close()
#2、将数据写入csv格式的文件 ls = [ [], [], [] ]#二维列表 f = open(fname,'w') for item in ls: f.write(',' . join(item)+'\n') #join:将join前面的字符串分隔放置到join后面参数的各个元素之间再加个回车
f.close()
9.4.3 二维数据遍历:双for循环。
9.5 模块6:wordcloud库使用
词云:就是艺术性文字可视化展示
前提:pip install wordcloud
9.5.1 使用说明
wordcloud 库把词云当成一个 WordCloud 对象
-可根据词语出现频率等参数绘制图云
-可设置词云尺寸颜色形状等参数
w.generate(txt) 向wordcould对象w中加载文本txt
>>>w.generate("Python and WordCould")
w.to_file(filename) 将词云输出为图像文件,png或jpg格式
>>>w.to_file("outfile.png")
9.5.2 绘制一个词云图片
步骤:1、▲配置对象参数----2、加载词云文本---3、输出图片文件(程序同目录)
#最简单词云例子 import wordcloud c = wordcloud.WordCloud() #创建词云对象 c = generate("wordcloud by pythnon") #加载文本 c.to_file("pywordcloud.png") #输出文件
      词云库进行的工作:
    -分隔:以空格分隔单词
    -统计&过滤:字体大小的依据,仅有一两个的单词过滤掉
        -字体:根据统计配置字号
   -布局:颜色环境尺寸
    配置对象参数
  w = wordcloud.WordCloud(<参数>)
  配置词云图片大小:
  w = wordcloud.WordCloud(width=600)
  w = wordcloud.WordCloud(height=400)
  ps:不设定默认width,height=400,200
  配置词云字号:
  w = wordcloud.WordCloud(min_font_size=10)  
  w = wordcloud.WordCloud(max_font_size=20)
  #设置最大和最小字号
  
  w = wordcloud.WordCloud(font_step=2)
  #设置字号变大的步进间隔,默认为1
  
  w = wordcloud.WordCloud(font_path="myth.ttc")
  #指定字体文件路径,默认None
  w = wordcloud.WordCloud(max_words=20)
  #词云只放二十个词语
  
  w = wordcloud.WordCloud(stop_words={"PYTHON"})
  #设置词云屏蔽的词语
  w = wordcloud.WordCloud(background_color="white")
  #更改图片背景颜色默认黑色
  mask函数 :指定词云形状卡卡西形(默认是矩形)
PS:词云库是以空格作为分隔的,故对于中文分词要先进性jieba库分词操作。
 
import jieba import wordcloud txt = "硅基光电集成被认为解决微电子发展难题的一支很有潜力的方\ 向,对它的研究也进行了很长时间。限制其发展的最大障碍便是\ 至今没有合适的材料可作为硅基光源,本论文针对硅基光源这一\ 方向,对掺铒富硅氮氧化硅的敏化发光进行了探究,对掺铒硅基\ 发光材料的研究有一定的参考价值和重要意义。" w = wordcloud.WordCloud(width=5000,\ font_path="msyh.ttc",height=3000) w.generate(" ".join(jieba.lcut(txt))) w.to_file("1.jpg") #输出文件
9.6 实例12:政府工作报告词云
基本思路:读取文件,分词整理—>设置并输出词云—>观测结果,迭代优化
 
#GovRptWordCloud.py import jieba import wordcloud f=open("中共中央国务院关于实施乡村振兴战略的意见.txt","r",encoding="utf-8") #打开文本 exclude={'我们','你们','他们','它们','因为','因而','所以','如果','那么',\ '如此','只是','但是','就是','这是','那是','而是','而且','虽然',\ '这些','有些','然后','已经','于是','一种','一个','一样','时候',\ '没有','什么','这样','这种','这里','不会','一些','这个','仍然','不是',\ '自己','知道','可以','看到','那儿','问题','一会儿','一点','现在','两个',\ '三个','的','和','等'} #屏蔽词 t=f.read() #将文本内容一次性读入t f.close() ls=jieba.lcut(t) #将分词内容保存为列表ls txt=" ".join(ls) #词云库的处理要求是以空格分割的长文本,故用空格链接ls形成长字符串txt w=wordcloud.WordCloud(font_path="msyh.ttc",width=2000,\ height=1400,background_color="white",stopwords=exclude) #词云设置 w.generate(txt) #加载文本 w.to_file("GovRpt.png")
 
import jieba import wordcloud f=open("停用词.txt","r",encoding="utf-8") t=f.read() f.close() t.replace("\n"," ") a=jieba.lcut(t) exclude=set(a) f=open("掺铒富硅氮氧化硅的敏化发光研究_徐凌波.txt","r",encoding="utf-8") #打开文本 t=f.read() #将文本内容一次性读入 f.close() ls=jieba.lcut(t) #将分词内容保存为列表ls txt=" ".join(ls) #词云库的处理要求是以空格分割的长文本,故用空格链接ls形成长字符串txt w=wordcloud.WordCloud(font_path="msyh.ttc",width=2000,\ height=1400,background_color="white",stopwords=exclude) #词云设置 w.generate(txt) #加载文本 w.to_file("1.png")
tip:如果报错要把txt另存为一下,保存为utf-8格式
C10、python程序设计
 
10.1 实例13:体育竞技分析 10.2 python程序设计思维 10.3 python第三方库安装 10.4 模块7:os库的基本使用 10.5 实例14:第三方库自动安装脚本
10.1 体育竞技分析
思想:抽象+自动化:抽象比赛为某过程,自动执行N场比赛。
10.1.1 自顶向下&自底向上
自顶向下(设计):将总问题分解为若干小问题,可将小问题再分解,直到 小问题可以被计算机简单明了的解决(分而治之)
自底向上(执行):逐步组建复杂系统的测试方法(模块化集成)
10.4 模块7:os库的使用
10.4.1 os库介绍:与操作系统交互的库(win 、macOS、 Linux)
os库提供通用的基本的操作系统交互功能
-路径操作:os.path子库,处理文件路径及信息
-进程管理:启动系统中其他程序
-环境参数:获得系统软硬件信息等环境参数
10.4.2 路径操作
首先:import os.path
os.path.abspath(file) 返回file在当前系统中的绝对路径
>>>os.path.abspath("file.txt")
'C:\\Users\\file.txt'
os.path.getsize(file) 返回file对应文件的大小,以字节为单位
os.path.exists(file) 判断file是否存在,返回布尔值
os.path.isfile(file) 判断file是否为已存在的文件,返回布尔值
os.path.isdir(file) 判断file是否为已存在的目录,返回布尔值
os.path.get[a/m/c]time(file) 返回文件上一次访问/修改/创建时间。
10.4.3 进程管理
实质:使用我们的python程序,调用外部程序
os.system(command)
-执行程序或命令command
-win中,返回值是cmd的调用返回信息
例如: import os
os.system("C:\\Windows\\System32\\calc.exe")
#相当于直接在cmd里直接运行这行命令,调用并运行计数器(打开计算机)返回0表示运行正常
os.system("C:\\Windows\\System32\\mspaint.exe C:\\Users\\szr\\AppData\\Local\\Programs\\Python\\Python38-32\\GovRpt.png")
#运行画图并打开图片
10.4.4 环境参数:获取和改变系统环境信息
os.chdir(file) 修改当前程序的路径
os.getcwd() 返回程序当前目录
10.5 实例14:自动化安装第三方库
提供更多写自动化python脚本的思路
 
import os libs={"jieba","pillow","requests","wheel","pyqt5"} try: for lib in libs: os.system("pip install"+lib) print("successful") except: print("error") #对写自动化脚本提供了新的思路
  
  
    
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号