[同济大学python程序设计笔记]
目录
一、基本语法与元素
二、数据结构
三、结构化程序设计
四、函数
五、文件和数据格式化
六 面向对象
七 数据可视化
八、第三方库
1 turtle库
2 random库
3 time库
4 pyinstaller库和jieba库
5 常见的第三方库
一、基本语法与元素
1 程序与程序设计语言
计算机程序:
计算机程序是为了解决某个特定问题
使用某种程序设计语言编写的一组指令序列
程序的IPO模式
数据输入
数据处理
数据输出
程序设计语言分类
低级语言
机器语言
由0和1组成的能被机器直接理解和执行的指令集合
汇编语言
用英文助记符来表示机器指令
高级语言————面向自然语言和数学语言,远离机器的程序设计语言
面向过程程序设计语言
面向对象程序设计语言
解释性语言
python、VB.NET
编译性语言
C/C++、C#
安装第三方库
pip install wordcloud -i https://mirrors.aliyun.com/pypi/simple/ pip install scipy -i https://mirrors.aliyun.com/pypi/simple/
生成可执行文件
pyinstaller 选项 Python源文件 -F 生成单个可执行文件 -D 产生一个目录 -d 产生debug版本的可执行文件 -w 指定程序运行时不显示命令行窗口
2 关键字
'False', 'None', 'True', 'peg_parser', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'
assert:检测调试代码
is:判断两个变量的指向是否完全一致,及内容与地址需要完全一致,才返回True,否则返回False
raise:主动抛异常设定的关键字
yield:任何使用yield的函数都称之为生成器,而生成器通常可理解成迭代器
async:异步编程
await:异步编程
二、数据结构
1 数据类型分类
基本数据类型
整数 int
浮点数 float
复数 complex
布尔型 bool
复合数据类型
有序序列
字符串型 str
列表 list
元组 tuple
无序序列
字典 dict
集合 set
常量
表示固定不变的数据
变量
用来存储可能变化的数据
标识符
在程序中为处理的对象起个名字
3xy # 数字开头
y-z # 不允许出现减号运算符
Wang Ping # 不允许出现空格
False # Python中的关键字
Sin # Python中的函数名
2 数字类型
包括int(整数类形)、float(浮点数类型)、complex(复数类型)和bool(布尔型,数字里面的布尔型不是指True和False,指的是1和0)。
整数
十进制
n n:0-9
八进制
0On n:0-7
十六进制
0Xn n:0-9,A-F
实数
带小数点或指数符号”E”的数。
复数
实部 real
虚部 imag
运算符
算术运算符
赋值运算符
左边只能是变量
简单赋值
复合赋值
链式赋值
序列解包赋值
数据类型转化
隐式转换
运算结果的数据类型向精度高的数据类型靠拢
整型<浮点<复数
显式转换
常用的是int()、float()和complex()
下面为需要掌握的相关函数:
(1) 内置模块(__builtin__)
divmod()
函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。
abs()
函数返回数字的绝对值。
pow()
方法返回 x^y(x的y次方)的值。
round(x,n)
返回浮点数x四舍五入后保留n位小数的值
min(),max()
会返回给定序列的最小/最大值
eval()
去掉参数最外侧引号并执行余下语句的函数
(2) 数学库模块math
math.pi
math.e
math.cos(x)--------输入弧度
math.sin(x)--------输入弧度
(x*math.pi/180)
math.exp(x)
math.gcd(m,n)
math.log(x)
math.log10(x)
math.sqrt(x)
math.tan(x)
3 字符串类型
需要掌握引索、切片以及基本的format()格式化的方法。
转义字符
转义字符 | 描述 |
---|---|
\\ | 反斜杠符号 |
\r | 回车 |
\b | 退格 |
\t | 横向制表符 |
\n | 换行 |
字符串基本操作符
+
拼接两个字符串
s*n
对字符串s复制n次
S1 in S2
子串测试。s1若是s2的子串返回True,否则 False
s[i]
索引操作,取某字符
s[n:m]
切片操作,返回索引号n到m但不包括m的子串;省略n表示从头,省略m表示取到结束
索引方式:正向递增和反向递减
字符串也内置了很多对字符串进行操作的函数:
string.upper()转换string 中的小写字母为大写
string.lower()转换string 中的小写字母为小写
string.capitalize()把字符串的第一个字符大写
string.find(str,beg=0, end=len(string)) 检测 str 是否包含在 string 中,如果 beg 和end 指定范围,则检查是否包含在指定范围内,如果是返回str开始的索引值,否则返回-1
string.join(seq)以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
string.rfind(str,beg=0,end=len(string) ) 类似于 find()函数,不过是从右边开始查找.
string.isnumeric() 全是数字返回TRUE
string.isalpha() 全是字母返回TRUE
string.replace(old,new) 替换
不改变引用对象
string.split('a') 按照'a'进行分离
string.strip(s) 去掉字符串s两边的空格
格式化输出
①%方法:
符 号 | 描述 |
---|---|
%c | 单个字符 |
%s | 字符串 |
%d | 整数 |
%f | 浮点数 |
%e | 指数 |
x=1234.567,n=1234567,a="pythonOk" print("x=%6.2fa=%sn=%d"%(x,a,n))
②format方法:
"{0:*^12.5f}".format(45.45612346786)//0是序号 //其中*是填充字符//^是位置,<表示向左对齐,>表示向右对齐
③print方法
print([输出项, ...][, sep=分隔符][, end=结束符])
以下为需掌握的函数
chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
ord() 函数是 chr() 函数(对于8位的ASCII字符串)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值。
oct() 函数将一个整数转换成8进制字符串。
hex() 函数用于将10进制整数转换成16进制,以字符串形式表示。
len() 方法返回对象(字符、列表、元组等)长度或项目个数。
str()返回一个对象的string格式。
4 布尔类型
关系运算符
字符串比较规则:将两字符串从左到右一对一对按字符编码值比较,
只要有一对不同比较结束。
逻辑运算符
not
and
or
5 列表
列表生成
//直接使用[ ]生成列表Li=[ 1,20.9,-1] //使用list函数//list 配合range产生列表a=list(range(1,10,3) )[1,4,7]University="Tongji" ['T', 'o', 'n', 'g', 'j', 'i']Li=list(University) //其他 : 切片,列表方法append,列表推导式
列表删除
Li=[ 1,20.9,-1] del Li # 删除列表
列表遍历
枚举方式
R=list(range(100,1000)) for item in R:x=item % 10y=item // 10 % 10z=item//100if (x**3+y**3+z**3)==item:print(item)
下标索引
R=list(range(100,1000)) for i in range(len(R)):x=R[i] % 10y=R[i] // 10 % 10z=R[i]//100if (x**3+y**3+z**3)==R[i]:print(R[i])
enumerate函数
R=list(range(100,1000)) for i, item in enumerate(R):x=item % 10y=item // 10 % 10z=item//100if (x**3+y**3+z**3)==item:print('第'+str(i)+'项是水仙花',item)
注意
如果遍历的同时,需要对表项值修改,则必须用下标方式
列表分片
分片赋值
L=[1,2,3,4,5] L[1:1]=[-9,-8,-7] print(L) 结果为:[1, -9, -8, -7, 2, 3, 4, 5]
列表运算
加法
乘法
列表方法
append()
append不换内存地址
+换内存地址
count()
对指定的元素计数,既元组在表中出现几次
sort()
列表是同一类型才可比较
copy()
clear()
insert(i,x)
pop(i)删除
reverse()反转
map(函数名,列表)
map函数将指定函数作用于列表的每个元素
zip函数
zip函数将多个列表的对应元素整合为元组
zip对象不能直接显示其包含的值,需要用list函数将zip对象转换为列表再显示
names=['张仟', '石戎', '万行'] ages=[23, 21, 22] for name,age in zip(names,ages):print(name,age)
enumerate
enumerate函数将一个列表的元素与其下标索引号组成元组
names=['张仟', '石戎', '万行'] enu=enumerate(names) print(enu) print(list(enu))
列表推导式
li= [x*x for x in range(10)] li= [x*x for x in range(10) if x%3==0]
6 元组
Python的元组与列表类似,不同之处在于元组的元素不能修改,元组使用小括号,列表使用方括号,元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。此外,元组中只包含一个元素时,需要在元素后面添加逗号。
a=(1) 类型是int
a=(1,) 类型是tuple
7 字典
字典是另一种可变容器模型,且可存储任意类型对象,字典的每个键值key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号{}中。键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一;值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
字典方法
dict.clear()删除字典内所有元素
dict.copy()返回一个字典的浅复制
dict.fromkeys(seq[, val])创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
dict.get(key,default=None)返回指定键的值,如果值不在字典中返回default值
dict.has_key(key)如果键在字典dict里返回true,否则返回false
dict.items()以列表返回可遍历的(键, 值) 元组数组
dict.keys()以列表返回一个字典所有的键
dict.update(dict2)把字典dict2的键/值对更新到dict里
dict.values()以列表返回字典中的所有值
pop(key[,default])删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。否则,返回default值。
popitem()返回并删除字典中的最后一对键和值
8 集合
集合(set)是一个无序的不重复元素序列,可以使用大括号{}或者set()函数创建集合,注意:创建一个空集合必须用 set() 而不是{},因为{}是用来创建一个空字典。下面是集合的一些操作:
add(x)元素x添加到集合s中,如果元素已存在,则不进行任何操作。
remove(x)将元素x从集合s中移除,如果元素不存在,则会发生错误。
len() 计算集合s元素个数。
clear() 清空集合s。
pop()随机移除元素
symmetric_difference()返回两个集合中不重复的元素集合
union()返回两个集合的并集
symmetric_difference_update()移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
difference()返回多个集合的差集
9 random库
random.seed(n) 创建n个随机数种子,之后的随机数不会改变
random.random() 随机产生0到1的一个浮点数
random.randint(a,b) 随机产生一个[m,n]之间的随机数
random.randrange(m,n,k) 随机产生一个[m,n)之间的随机数,可设置步长k
random.sample(seq,k) 从序列seq中随机抽取k个元素组成列表
三、结构化程序设计
(1) 顺序结构
输入数据
计算等处理
输出结果
(2) 选择结构
if 语句
if condition_1:statement_block_1 elif condition_2:statement_block_2 else:statement_block_3注意: (1)在Python中语句块是使用冒号(:)开头,之后统一语句块内有相同的缩排, 不可混用不同空格数量(默认为4个),也不能混用空格、Tab键。 (2)语句块的使用和书写规则在下面选择结构的else、elif子句、循环结构的循环体、 函数定义中的过程体等都相同,不再重复说明。
(3) 循环结构
while 引导的无限循环 for 引导的遍历循环 continue 跳过本轮循环 break 跳出循环 pass 占据位置
(4)异常处理:掌握try-except的用法(难度:⭐⭐)
(5)else子语句
for 循环变量 in 序列: 循环体 else:语句块 while 表达式 :循环体 else:语句块
注意: (1)序列可以是字符串、列表、元组、集合等, 还可以是常用的range()函数。 (2)循环的次数由序列中的成员个数决定。 (3)书写规则序列后要有冒号、循环体要右缩排。
(4) 算法习题
辗转相除法
m,n=eval(input("请输入m,n")) if m<n: # 若m<n,则交换m,n=n,m r=m%n while(r!=0):m=nn=rr=m%n print(n) def gcd(m,n):if n==0:return melss:return gcd(n,m%n)
九九乘法表
下三角 for i in range(1,10):for j in range(i,10):print("{}*{}={:2d}".format(i,j,i*j),end=' ')print()print(" "*7*(i),end="") 上三角 for i in range(1,10):for j in range(1,i+1):print("{}*{}={:2d}".format(i,j,i*j),end=' ')print()
判断素数
def isprime(m):for i in range(2,m):if m%j==0:return Falsebreakreturn True
数字之美
for i in range(1,10):s="1"*iprint("{}{}*{}={}".format(" "*(20-2*i),s,s,int(s)**2))
级数和
//e i=s=t=1 while (1/t>=0.0000001):t=t*is+=1/ti+=1 // π/4 i=t=1 s=0 while (abs(t)>=0.0000001):t=(-1)**(i-1)*(1/(2*i-1))s+=ti+=1
字符串加密
s="adsasdasdadaslsjfksdglsdfjlsdf" code="" for c in s:if "a"<c<"z":iasc=ord(c)+5if iasc>ord("z"):iasc-=26code+=chr(iasc)elif "A"<=c<="Z":iasc=ord(c)+5if iasc>ord("Z"):iasc-=26code+=chr(iasc)else:code+=c print("加密后的字符串为:",code)
谁是凶手
for a in range(0,2):for b in range(0,2):for c in range(0,2):for d in range(0,2):if (a==0)+(c==1)+(d==1)+(d==0)==3 and a+b+c+d==1:print(a,b,c,d) a,b,c,d是否等于1,代表他是否是凶手
分解因子
n=1325 print(n, '=', end = ' ') i =2 while i<=n:while n % i == 0: # 把n的所有因子i全部处理完 n=n//iif n == 1:print('{:d}'.format(i))else:print('{:d} *'.format(i), end = ' ')i+=1
矩阵相乘
A=[[1,3,4],[5,1,0]] B=[[3,1,5],[7,0,2],[2,-1,3]] C=[] row=len(A) col=len(B[0]) for i in range(row):oneRow=col*[0]for j in range(col):s=0.0for k in range(len(B)):s+=A[i][k]*B[k][j]oneRow[j]=sC.append(oneRow) print(C)
四、函数
函数定义
def定义函数:函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(),任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数,return[表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
def 函数名([参数表]) :函数体[return 语句]
def
关键字
函数名
用户自定义标识符
参数表
形式参数
冒号
必须写
形参
函数定义时
实参
函数使用时
函数的参数
默认参数:使用默认参数的时候,如果给形参传递了实参,则形参会接收实参的值。如果没有给这个形参传递实参,则形参会采用默认值。
def Point(n,value=1):p=[value]*nreturn p //省略默认值参数调用: p2=Point(3) //指定默认参数值调用: p1=Point(5,2) 一旦一个实参数开始指定了形参,后续的所有参数都必须指定形参关键字
位置参数:实参和形参的数量上必须要保持一致。
def quadricEquation(a,b,c): x,y,z=1,8,3 roots=quadricEquation(x,y,z,10)
关键字参数:通过定义关键字获取实参的值,与形参的顺序无关。
可变参数:形参的数据会根据实参的数量的变化而变化。
元组型可变参数
参数的前面加*,可变长度参数将对应于它的实参转化为一个元组。 def calculate(cmd,*data):if cmd=="ave":return sum(data)/len(data)elif cmd=="sum":return sum(data)else:return data a=calculate("av",123,34,5,6,6,7)
词典可变参数
参数的前面加**,对应的实在参数以“标识符=值”的方式传递,可变参数将对应的实参,转化为字典,以“标识符”为键,以“值”为值 def keyArgFunc(cmd,*data,**keyarg): # keyarg 是一个字典print(cmd)for x in keyarg:print( x + ": " + str(keyarg[x])) keyArgFunc('求和',no=10,name='李彤')
注意事项
根据定义规则,可变长参数必须放在函数形参表的最后,
在位置形参、默认值形参与可变长关键字都存在的函数中,其调用不符合形参名字方式。
因为一旦指定形参名字字调用,后续则必须也采用这种模式,但可变长度形参,其对应实参存在多个参数,所以无法为其实现形参关键字命名
一旦一个实参数开始指定了形参,后续的所有参数都必须指定形参关键字
函数中对形参直接赋值,不影响实参的值
通过形参对列表元素或对象属性值的变更,会导致对应实参值的变更
在传递参数前将序列解包,其格式为实参前面加*
def mul(*data): # data是可变长参数s=1for item in data:s *=itemreturn s L=(1,2,3,4,5) # L是元组 print(mul(*L))
变量作用域
//显式使用全局变量,global x=1 def fx():global xx=1000print("局部的x=",x) fx() print (“全局的x=", x) //隐式使用全局变量def fx(n):z=100*x //-------> x出现在=右侧,全局的 print("z=",z,'x=',x) x=1 #全局变量xfx(3)print ("全局的x=", x)
lambda函数
函数名=lambda 形参表:表达式 s=lambda L: sum(L)/len(L)
高阶函数
//形式参数是一个函数 def add(x,y):return x+y def subtract(x,y):return x-y def myfun(x,y,f):return f(x,y) s=myfun(2,4,add) print(s) s=myfun(2,4,subtract) print(s)
递归函数
def f(参数列表):If 递归结束条件:return 结束时的值else: f = 递归表达式End If End Function
阶乘
def f(n):if n==1:return 1else:return f(n-1)*n
前n项和
def f(n):if n==1:return 1else:return f(n-1)+n
斐波那契
def fibo(n):if n==1 or n==2:return 1else:return fibo(n-1)+fibo(n-2)
字符串逆转
//把最后一个字符放前面 def rev(s):if len(s)==1:return selse:return s[-1]+rev(s[:-1]) //把最前面一个字符放在最后面 def rev(s):if len(s)==1:return selse:return rev(s[1:])+s[0]
汉诺塔问题
//n-1个盘从A借助C移动B //从A移动一个到C //n-1个盘从B借助A移动C def Hanoi(n,A,B,C):if n==1:print(A+"→"+C)else:Hanoi(n-1,A,C,B)print(A + "→" + C)Hanoi(n - 1, B, A ,C) Hanoi(3,"A","B","C")
最大公约数
//辗转相除法 def gcd(m,n):if m%n==0:return nelse:return gcd(n,m%n) //辗转相减法 def gcd(m,n):if m<n:m,n=n,mif m-n==0:return nelse:return gcd(n,m-n)
数制转化
//2~8 def Tran(d,r):if d==0:return ""else:return Tran(d // r,r) + str(d % r) //2~16 def Tran(d,r):if d==0:return ""if r<10:return Tran(d//r,r)+str(d%r)else:if d%r<10: return Tran(d//r,r)+str(d%r)else:return Tran(d//r,r)+chr(d%r-11+ord('A'))
五、文件和数据格式化
1 打开、关闭
//打开文件 fp = open(filename) fp = open(filename , "rt",encoding='utf-8') //注:用\\转义表示\ "D:\\Test\\Scores.txt " //r取消转义 r"D:\Test\Scores.txt“ //open函数的返回值是文件对象 //文件对象内置了一个迭代器 //关闭文件 fp.close()
open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出OSError。完整的语法格式为: open(file,mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
模式 | 描述 |
---|---|
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
2 文件访问
读文件
//read方法 返回值是字符串(整个文件内容),一次性读文件所有内容。 fp=open("D:\Test\Scores.txt","r") all=fp.read() //readline方法 fp=open(r"D:\Test\Scores.txt","r") while True:str=fp.readline()if not str:breakprint(str, end="") fp.close() //readlines方法 返回值是列表,整个文件内容当成一个列表,一行一个列表元素 fp=open(r"D:\Test\Scores.txt","r") lines=fp.readlines() print(lines) fp.close()
写文件
//write方法 参数只能是字符串: fp.write(88)报错 写数据时不会自动换行***** fp.write("185125") fp.write("徐文静") fp.write("88") //writelines方法 lines是字符串列表 fp.writelines(lines)
3 文件编码
ANSi
西文字符
ASCII码 一个字节
汉字
GBK码 二个字节
UNICODE
西文字符
加两个十六进制0,41H 00 41H
汉字
编码与GBK不同
UTF-8
UNICODE的变种 所有字符:1~6字节
4 文件路径
绝对路径
相对路径
5 异常处理
try:pass except:pass finally:pass
6 中文分词
//精准模式 import jieba lst=jieba.lcut("小米爱神的箭阿萨德大声道")
7 图像处理
PIL
from PIL import Image //打开图像 im=Image.open(r"../Datas/1.jpeg") //转化图像 im=im.convert("L") //显示图像 im.show() //保存图像 im.save(r"../Datas/1-test.jpeg") //获取图像位置(10,10)像素值 im.getpixel((10,10)) //缩略图 im_thumbnail=im.thumbnail((128,128)) //缩放 im_resize=im.resize((200,200)) //旋转 im_rotate=im.rotate(-45)#顺时针45度
8 习题
统计人物出现次数
import jieba file=open(r"../Datas/红楼梦.txt","r",encoding="utf-8") txt=file.read() wordlist=jieba.lcut(txt) actors=[('贾宝玉','宝玉'),('林黛玉','黛玉'),('王熙凤','凤姐')] dicActors={} for actor in actors:count1=wordlist.count(actor[0])count2=wordlist.count(actor[1])dicActors[actor[0]]=count1+count2 items=list(dicActors.items()) items.sort(key=lambda x:x[1],reverse=True) print(items) for i in range(len(items)):word,count=items[i]print(items[i][0],items[i][1])
六 面向对象
类的成员
私有成员 __x两个下划线开头
保护成员 _x一个下划线开头
公有成员 无下划线
判断是否实例
isinstance
构造函数
__init__
派生类
class 派生类名(父类名):
派生类的构造函数
父类ming.__init__(鸡肋构造函数参数表)
迭代器
可迭代对象
for i in list:
迭代器
class Fibo():def __init__(self,max)://类构造函数self.max=maxself.n,self.a,self.b=0,0,1def __iter__(self)://返回迭代器对象并初始化return selfdef __next__(self)://从当前迭代器返回当前值,并改变下一次调用的状态if self.n<self.max:temp=self.bself.a,self.b=self.b,self.a+self.bself.n+=1return tempreturn StopIteration
生成器
def Fibo(n):a,b=0,1while a<n:value=aa,b=b,a+byield value
七 数据可视化
1 图标的组成
容器层
Canvas画布
Figure 绘图区
Axes 坐标系
辅助显示层
标题
坐标轴
坐标轴名称
坐标轴刻度
坐标轴刻度标签
图标边框线
网格线
图例
图像层
折线图
散点图
柱状图
饼图
2 图像绘制函数
plt.axis()
显示当前坐标轴的范围
plt.axes()
显示坐标系风格的绘图区
plt.xlim(left,right)
设置坐标轴的取值范围
plt.text(x,y,s)
在指定位置添加注释文本
plt.grid()
设置绘图区的网格显示
plt.title(label,loc='center')
在指定位置显示标题
plt.xlabel(xlabel)
设置X轴的标题
plt.xticks(ticks,labels)
设置分类轴和数值
plt.legend()
设置图例显示
plt.fill(x,y,color)
plt.rcParams['font.sans-serif']=['SimHei']
设置中文字体,正常显示汉字
苹果电脑设置为plt.rcParams['font.sans-serif']=['Arial Unicode MS']
Linestyle
'-'画实线
'--'画长虚线
':'画短虚线
'None' 不画线
marker
'o'圆圈
'.'点
'*'星号
函数种类
线条
import matplotlib.pyplot as pltplt.plot([5,2,1], [3,1,3], 'yD-', label='line 1', linewidth=4)plt.legend(loc="center right")
饼图
import matplotlib.pyplot as plt score = [0.16,0.28,0.32,0.14,0.1] #各等级的成绩数据 plt.rcParams['font.sans-serif']=['SimHei'] plt.title("成绩分布图") #图表标题 labels = ['优秀', '良好', '中', '及格','不及格'] #数据标记 explode = (0.2, 0, 0, 0,0) #裂开第1块 plt.axis("equal") plt.pie(score, explode=explode, labels=labels, autopct='%4.1f%%') # autopct=‘%4.1f%%’控制数据标记的格式化显示,显示1位小数 plt.legend(bbox_to_anchor=(1, 0.6)) #设置图例显示位置
散点图
from math import * import matplotlib.pyplot as plt plt.rcParams['axes.unicode_minus']=False plt.rcParams['font.sans-serif']=['SimHei'] fig1=plt.figure(figsize=(8,4),facecolor='w') fig1.add_subplot(121) #添加第1个子绘图区 plt.title('标记绘制的图案') a=0 while a<=2 * pi: #每次产生一个坐标点r=sin(4*a) #花瓣数为8x,y=r*cos(a),r*sin(a) plt.plot(x,y,'b*',linewidth=4) #绘制星号a+=0.02 fig1.add_subplot(122) #添加第2个子绘图区 plt.title('散点绘制的图案') a=0 while a<=2* pi: r=sin(5*a) #花瓣数为5x,y=r*cos(a),r*sin(a)plt.scatter(x,y,c="g",marker="o") #绘制绿色圆圈a+=0.02
3 习题
平方曲线和倒数曲线
import matplotlib.pyplot as plt import numpy as np # plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] fig,axes=plt.subplots(2,1,figsize=(6,6)) x1=np.linspace(-1,1,30) y1=x1*x1 x2=np.linspace(0,1,30) y2=1/x2 plt.subplot(211) plt.title("平方曲线") plt.plot(x1,y1) plt.subplot(212) plt.title("倒数曲线") plt.plot(x2,y2) plt.show()
正弦函数
import matplotlib.pyplot as plt import math import numpy as np x=np.linspace(-math.pi,math.pi,100) y=list(map(math.sin,x)) plt.scatter(x,y,marker='*') # plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] plt.title("Sin函数曲线") plt.xlim(-4,4) plt.ylim(-1.2,1.2) plt.plot(range(-4,5),len(range(-4,5))*[0]) plt.plot(len(range(-2,3))*[0],range(-2,3)) plt.text(0.12,1,"Y") plt.text(-math.pi-0.1,0-0.1,"-pi") plt.text(0,0,"0") plt.text(4-0.1,0-0.1,"X") plt.text(math.pi,0,"pi") plt.show()
心形线
import matplotlib.pyplot as plt import math import numpy as np plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] theta = np.linspace(0.0, 2 * np.pi, 1000) a = 5 rho = a * (1 - np.sin(theta)) # plt.subplot(polar=True) plt.polar(theta, rho, c = 'r') plt.show() theta = np.linspace(0.5*np.pi, 1.5*np.pi, 1000) sintheta = np.sin(theta) a = 1 y = a * sintheta * (1 - sintheta) x = np.sqrt((1 - sintheta) ** 2 - y ** 2) x1 = np.hstack((x,-x[::-1])) #x[::-1]意思是反转x y1 = np.hstack((y,y[::-1])) plt.plot(x1, y1, c = 'r') plt.title("心形曲线-直角坐标系") plt.show()
饼图
import matplotlib.pyplot as plt partial=[0.2,0.1,0.3,0.13,0.27] #各等级的成绩数据 plt.rcParams['font.sans-serif']=['SimHei'] plt.title("成绩分布图") #图表标题 consumes=['学习用品','日常用品','伙食费','通讯费','其他开支'] #数据标记 explode = (0.2, 0, 0, 0,0) #裂开第1块 plt.axis("equal") plt.pie(partial, explode=explode, labels=consumes, autopct='%4.1f%%') plt.legend(bbox_to_anchor=(1, 0.6)) plt.show()
词云
from PIL.Image import Image import jieba import matplotlib.pyplot as plt import numpy as np from wordcloud import WordCloud fp=open(r"../Datas/三国演义.txt",'r',encoding='utf-8') plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] characters=[("曹操"),("董卓"),("黄忠"),("刘备"),("刘表"),("鲁肃"),("吕布"),("马超"),("马岱"),("孟获"),("庞德"),("孙权"),("孙策"),("魏延"),("袁绍"),("赵云"),("周瑜")] words=fp.read() wordlist=jieba.lcut(words) dictcharacters={} for character in characters:dictcharacters[character]=wordlist.count(character) items=list(dictcharacters.items()) # items.sort(key=lambda x:x[1],reverse=True) characterlist=[] countslist=[] for i in items:characterlist.append(i[0])countslist.append(i[1]) plt.subplot(211) plt.bar(characterlist,countslist,width=0.8) mask=np.array(Image.open(r"../Datas/1.jpeg")) wcd=WordCloud(background_color="white", font_path="/Users/tangyufeng/Downloads/SimHei.ttf", max_words=1000,mask=mask ,max_font_size=100) characterSS=''.join(characterlist) print(characterSS) mywd=wcd.generate(characterSS) plt.subplot(212) plt.axis('off') plt.imshow(mywd) plt.show()
散点图
import matplotlib.pyplot as plt import numpy as np fp=open(r"../Datas/epoch.txt",'r',encoding='utf-8') plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] trainlosses=[] trainaccuracy=[] testlosses=[] testaccuracy=[] datas=fp.readlines() for unit in datas:trainlosses.append(float(unit.split('\t')[0]))trainaccuracy.append(float(unit.split('\t')[1]))testlosses.append(float(unit.split('\t')[2]))testaccuracy.append(float(unit.split('\t')[3])) x=range(0,len(trainaccuracy)) plt.subplot(211) plt.xlabel("训练轮数") plt.ylabel("准确率") # plt.legend('lowwer right') plt.scatter(x,trainaccuracy,label='训练集的准确率') plt.plot(x,testaccuracy,label='验证集的准确率') plt.title("训练集和验证集的准确率") plt.legend() plt.subplot(212) plt.xlabel("训练轮数") plt.ylabel("损失值") plt.scatter(x,trainlosses,label='训练集的损失值') plt.plot(x,testlosses,label='验证集的损失值') plt.title("训练集和验证集的损失值") plt.legend() plt.show()
八、第三方库
1 turtle库
绘制状态函数:pendown()、penup()、pensize()以及对应别名为pd()、pu()、width();
颜色控制函数:color()、pencolor()、begin_fill()、end_fill();
运动控制函数:forward()、backward()、right()、left()、setheading()、goto()、circle()以及对应别名fd、bk()、rt()、lt()、seth()
2 random库
考查seed()、random()、randint()、getrandbits()、randrange()、uniform()、choice()、shuffle()、sample()
3 time库
时间处理函数:time()、gmtime()、localtime()、ctime()
时间格式化函数:mktime()、strftime()、strptime()
计时函数:sleep()、perf_counter()
4 pyinstaller库和jieba库
记住pyinstaller打包文件的命令pyinstaller-Fc:...\your_python_file.py以及jieba中的jieba.lcut()方法即可
5 常见的第三方库
网络爬虫:requests、scrapy、pyspider
数据分析:numpy、pandas、scipy
文本处理:pdfminer、python-docx、beautifulsoup4
数据可视化:matplotlib、seaborn、mayavi
用户图形界面:PyQt5、wxPython、PyGObject
机器学习:scikit-learn、TensorFlow、mxnet
Web开发:Django、pyramid、flask
游戏开发:pygame、Panda3D、cocos2d
[同济大学python程序设计笔记]相关推荐
- 《python 程序设计》读书笔记
<python 程序设计>读书笔记 笔者对于csdn博客的运用还是不太熟练,希望大家能够见谅.以后会不断提升写作的手法.这篇博客是我在学习python程序设计时候的笔记.我也是选择学习了大 ...
- 北理工嵩天Python语言程序设计笔记(10 Python计算生态概览)
前言 本文是对<北理工 嵩天/黄天宇/礼欣 Python语言程序设计>的学习笔记,供自己查阅使用. 文章目录 北理工嵩天Python语言程序设计笔记(目录) 北理工嵩天Python语言程序 ...
- 中国大学MOOC实用Python程序设计学习笔记和课后测试1-3周(北京大学)
中国大学MOOC实用Python程序设计学习笔记和课后测试1-3周(北京大学) 第1周 Python初探 为project设置解释器 保留字 第1周课后测试题 第2周 基本运算.条件分支和输出格式控制 ...
- 北理工嵩天Python语言程序设计笔记(8 文件和数据格式化)
前言 本文是对<北理工 嵩天/黄天宇/礼欣 Python语言程序设计>的学习笔记,供自己查阅使用. 文章目录 北理工嵩天Python语言程序设计笔记(目录) 北理工嵩天Python语言程序 ...
- Python语言程序设计笔记(全)
Python语言程序设计 源代码人类可理解 目标代码 计算机直接执行 文章目录 Python语言程序设计 1.编译与解释 2.编程语言分类 3.python语言简介 4. 下载配置python 5.编 ...
- python三年a班的成绩_Python题集:2019春Python程序设计选修课习题笔记
1.判断题:python 1-一.在Python 3.x中可使用中文做为变量名.git 答案:√算法 1-二.Python变量使用前必须先声明,而且一旦声明就不能再当前做用域内改变其类型.编程 答案: ...
- (转载)[python学习笔记]Python语言程序设计(北理工 嵩天)
作者:九命猫幺 博客出处:http://www.cnblogs.com/yongestcat/ 欢迎转载,转载请标明出处. 如果你觉得本文还不错,对你的学习带来了些许帮助,请帮忙点击右下角的推荐 阅读 ...
- 超级详细的Python程序设计学习笔记,适合Python二级备考和自学Python的小白(me too)
超级详细的Python学习笔记,适合Python二级备考和自学Python的小白(me too). 写作不易,喜欢的话点个赞吧
- python程序设计报告-20192404 实验一 《Python程序设计》实验报告
学号 20192404 <Python程序设计>实验一报告 课程:<Python程序设计> 班级: 1924 姓名: 贾智博 学号:20192404 实验教师:王志强 实验日期 ...
最新文章
- 通信系统中对眼图的理解(二)
- 充电桩用linux系统吗,电动汽车充电桩和电池在管理系统上有什么差别?
- 网络营销外包——网络营销外包专员浅析提升用户体验从哪入手?
- 马哥2013年运维视频笔记 day02 Linux系统常识
- 提高mysql千万级大数据SQL查询优化30条经验
- 制作系统盘,重装新系统。
- Mysql命令行修改字段类型
- 计算机硬盘按不同接口,硬盘接口不同 速度差别竟然这么大
- java 实现文件下载保存框_Java开发网 - 任何类型的文件下载时都会弹出文件保存框的实现(原创)...
- LHDC、AAC、aptx、ldac、wha哪个更好,各有什么优缺点?
- linux怎么安装台式无线网卡,linux下安装无线网卡
- 企业微信最全17种获客+4种自动转化玩法
- hexo搭建个人博客之seo优化
- appiume连接逍遥模拟器
- [c语言]malloc动态开辟内存空间
- 【前端点击穿透】pointer-events属性详解
- Python入门自学进阶-Web框架——8、认识Ajax,与Django交互,基于jQuery
- 【概率期望】【NOIP模拟】切题
- 图文对齐居中的几种方式
- 区块链溯源是什么?一文带您读懂!