算是大计基课程内容的简单总结
语法部分
IO流
输入及处理
a=input("Hello World:") #a:string,单行读入字符串
b=int(input()) #b:int,单行读入单个整数
b=float(input()) #b:float,单行读入单个浮点数
a,b=map(int,input().split()) #a,b:int,单行读入两个整数
a=list(map(int,input().split())) #a:from 0 to n-1,单行读入不定个整数,从0开始存入数组
输出及处理
注:以下均使用%转义的语法
基本操作
print("%s %d %f"%(a,b,c))
一行内输出字符串,整数,浮点数,空格隔开
格式参数
d,i 带符号的十进制整数
o 不带符号的八进制
u 不带符号的十进制
x 不带符号的十六进制(小写)
X 不带符号的十六进制(大写)
e 科学记数法表示的浮点数(小写)
E 科学记数法表示的浮点数(大写)
f,F 十进制浮点数
g 如果指数大于-4或者小于精度值则和e相同,其他情况与f相同
g 如果指数大于-4或者小于精度值则和E相同,其他情况与F相同
C 单字符(接受整数或者单字符的字符串)
r 字符串(使用repr转换任意python对象)
s 字符串(使用str转换任意python对象)
完整参数
print(objects,sep,end,file,flush)
- sep
在输出字符串之间插入指定字符串,默认是空格
例:
print("a","b",sep="%")
- end
在输出的结尾加上指定字符串,默认是换行(\n),若取消换行写''
例:
print("a",end="%")
- file
将文本输入到file-like对象中,可以是文件,数据流等等,默认是sys.stdout
例:
fi=open('zht.out','w')
print("a",file=fi)
- flush
flush值为True或者False,默认为Flase,表示是否立刻将输出语句输入到参数file指向的对象中
例:
fi=open('zht.out','w')
print("a",file=fi)
print("a",file=fi,flush=True)
库文件
调用方法
import math #直接调用
print(math.ceil(2.5))
from math import ceil #精确调用
print(ceil(2.5))
from math import ceil as CE
print(CE(2.5)) #函数重命名
from math import *
常用库及函数表及用法
有待填坑
设计结构
顺序结构
略
选择结构
布尔值
Flase,None,0,空序列,空字符串,空字典为假,其他均为真
if语句
例:
a=1
b=2
if a>b and b==2:
print(1)
elif 1<=a<=1:
print(1)
注:elif可以替换为else,后面的条件删除,if之间可以嵌套
运算符:
and,or,not,==,>,<,!=,is,is not,in,not in
例:
a=1
b=1
if a is b:
print(1) #a,b指向同一个对象
a=[0,1,2]
b=2
if b in a:
print(1) #b在a中
循环结构
for循环
例:
a=list(range(0,5))
for i in range(0,10): #后面为可迭代对象
print("tql!") #从0~9循环
for i in a: #后面为列表
print("tql!") #从0~4循环
while循环
例:
i=1
while 1:
print("tql!")
i+=1
if i>=10:
break
else:
continue #0~10循环
数据结构
字符串
含特殊符号使用\转义
例:
print("\"Hello World!\"")
字符串是不可变对象,只可以正反序访问,正序0~n-1,反序-1~-n
切片访问:
a="abcd"
print(a[0:2])
print(a[:2])
print(a[0:])
常规操作
1.连接
a="abc"
b="cde"
print(a+b)
2.重复
a="abc"
print(3*a)
3.监测
a="abc"
print("a" in a)
4.取长度
a="abc"
print(len(a))
5.字符编码
强制使用中文:
#-*- coding:UTF-8 -*-
#coding=utf-8
例:
a=input()
print(eval(a)) #将字符串作为数值表达式
print(eval(str(1+2))) #将数值转换为字符串
List
定义
a=[]
b=[NONE]*100
c=[0 for i in range(0,100)]
特点
1.不固定长度,可以删减
2.成员类型不限制
3.可以嵌套列表
注:与vector类似
用法
1.访问
类比字符串,可以正序反序访问,取子列表
例:
a=[1,2,"a"]
print(a[0])
print(a[-1])
print(a[1:])
2.运算
支持加法(拼接)和乘法(重复)操作
例:
a=[1,2]
b=[3]
c=a+b
d=a*3
print(c)
print(d)
3.常用函数
a=[1,2]
a.append(3) #添加元素在末尾
a.insert(1,4) #在指定位置插入元素
print(a.pop()) #弹出元素,并从列表中删除(可以指定位置)
a.remove(x) #删除元素x(第一个匹配的)
a.sort() #排序,默认从小到大(只能排int)
print(a)
tuple
和list基本相同,不能增删改成员
字典
注:类似于C++中map,但是在没有建立映射关系时不可访问所对应键值!
可以嵌套
例:
a={"a":1,"b":2,"c":3}
a["a"]=3 #支持修改操作
del(a["b"]) #删除对应键值对
a["b"]=1 #增加新的键值对
print(a["a"]) #输出键值
print(a) #输出字典(按照键值添加的顺序)
模块化编程
函数
官方定义:完成特定功能的语句组
实际:对重复次数过多的某个功能进行的封装,以及为了程序主提简洁性将一些功能外放
基本操作
例:
def orz(name):
for i in range(1,10):
print("orz %s!"%name)
orz("Somebody")
传进去的参数为局部变量,在函数内部可以任意修改,赋值,对全局无影响,用return返回函数计算出的值
可以跨文件调用
例:
import circle
print(circle.aera(1))
命名规则
必须以下划线和字母开头,函数名区分大小写
Python提供的函数为内键函数,自己定义的函数不可以和内键函数重名,也不可以是保留字(如list,int)。
例:
p=1
def cul(x):
global p
p+=1
return x**p
print(cul(2))
print(p)
递归调用
def cul(x):
if (x==1):
return x
else:
return x*cul(x-1)
print(cul(10)) #计算10!
递归最大深度:2955层
模块
保存在外存储器的文件称为一个模块,可以被调用
import 模块名 进行调用
包
创建方法:新建文件夹,创建__init__.py,其他模块或子文件
添加内容: __all__=[文件夹中内容或子文件夹名称]
使用:import或from ... import ...
import sys
sys.path.append("D:")
文件操作
file=open("***")
out=open("***",'w')
a=file.read() #读取整个文件
b=file.readline() #读取一行文件,返回字符串
c=file.readlines() #读取整个文件,返回列表
w.write("a") #不换行输出
w.writeline("b") #换行输出
print(a)
print(b)
print(c)
file.close()
类
定义
class Edge:
def __init__(self,a,b):
self.t=a
self.d=b;
c=Edge(1,2)
print(c.t)
重载运算符
class Edge:
def __init__(self,a,b):
self.t=a
self.d=b;
def __add__(self,otherEdge):
c=self.t+otherEdge.t
d=self.d+otherEdge.d
return Edge(c,d)
def __str__(self):
return '--%d-->%d'%(self.d,self.t)
c=Edge(1,2)
d=Edge(3,4)
c=c+d
print(c)
高级数据结构
栈
先进后出
队列
先进先出
以上两类均可基于List实现
科学计算及GUI相关内容
图表绘制
柱状图
适用二维数据集
#含误差多变量
import numpy as np
import matplotlib.pyplot as plt
N=5
a=(1,2,3,4,5)
eps=(0,0,1,2,1)
b=(5,4,3,2,1)
Eps=(0,0,1,2,1)
ind=np.arange(N)
width=0.35
fig,ax=plt.subplots()
res1=ax.bar(ind,a,width,color='r',yerr=eps)
res2=ax.bar(ind+width,b,width,color='g',yerr=Eps)
ax.legend((res1[0],res2[0]),("Men","Women")) #右上角批注
ax.set_xlabel("time") #x轴标题
ax.set_ylabel("Num") #y轴标题
ax.set_title("Orz YW") #图表标题
ax.set_xticks(ind+width)
ax.set_xticklabels(('1','2','3','4','5')) #x轴坐标,一一对应
plt.show()
#朴素不含误差单变量
#不含坐标轴信息
import numpy as np
import matplotlib.pyplot as plt
N=5
a=(20, 35, 30, 35, 27)
ind=np.arange(N)
width=0.35
fig,ax=plt.subplots()
rects1=ax.bar(ind,a,width)
plt.show()
折线图
适合二维大数据集
#朴素折线图
import numpy as np
import matplotlib.pyplot as plt
x1=np.linspace(0.0, 5.0)
y1=np.cos(2 * np.pi * x1) * np.exp(-x1)
plt.plot(x1, y1, 'ko-')
plt.title('A tale of 2 subplots')
plt.ylabel('Damped oscillation')
plt.show()
#双折线图
import numpy as np
import matplotlib.pyplot as plt
x1=np.linspace(0.0, 5.0)
x2=np.linspace(0.0, 5.0)
y1=np.cos(2 * np.pi * x1) * np.exp(-x1)
y2=np.cos(2 * np.pi * x2)
plt.plot(x1, y1, 'ko-')
plt.plot(x2, y2, 'ro-')
plt.title('A tale of 2 subplots')
plt.ylabel('Damped oscillation')
plt.show()
#上下子图
import numpy as np
import matplotlib.pyplot as plt
x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)
plt.subplot(2, 1, 1)
plt.plot(x1, y1, 'ko-')
plt.title('A tale of 2 subplots')
plt.ylabel('Damped oscillation')
plt.subplot(2, 1, 2)
plt.plot(x2, y2, 'r.-')
plt.xlabel('time (s)')
plt.ylabel('Undamped')
plt.show()
数据拟合
线性拟合
#朴素线性拟合
import numpy as np
x=[1,2,3]
y=[2,4,6]
p=np.polyfit(x,y,1)
print(p)
print(np.polyval(p,5))
非线性拟合
#多维数据拟合并绘图
import numpy as np
import pylab as pl
import matplotlib as mpl
x=[19, 25, 31, 38, 44]
y=[19.0, 32.3, 49.0, 73.3, 97.8]
ab=np.polyfit(x,y,2)
print(ab)
x0=np.linspace(19,44,250)
y0=np.polyval(ab,x0)
pl.plot(x,y,'+',color='b',label='rawdata')
pl.plot(x0,y0,'r',label='fitline')
pl.show()
#自定义函数拟合并绘图
import numpy as np
import math
from scipy.optimize import leastsq
#定义待拟合的函数。x是变量,p是参数
def fun(x, p):
a,b,c = p
return a*(x**b)*(math.e)**(c*x)
def residuals(p, x, y):
return fun(x, p) - y
t=np.array([0.25,0.5, 0.75, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5,5,6,7,8,9,10,11,12,13,14,15,16])
h=np.array([30,68,75,82,82,77,68,68,58,51,50,41,38,35,28,25,18,15,12,10,7,7,4])
r = leastsq(residuals, [1, 1,1], args=(t, h))
#r[0]存储的是拟合参数,r[1]、r[2]代表其他信息
print ('拟合参数a,b,c为:',r[0])
a,b,c=r[0]
import matplotlib.pyplot as plt
plt.figure(figsize=(8,6))
plt.scatter(t,h,color="red",label="Sample Point",linewidth=3)
#画样本点
x=np.linspace(0,20,1000)
y=a*(x**b)*(math.e)**(c*x)
plt.plot(x,y,color="orange",label="Fitting Curve",linewidth=2) ##画拟合曲线
plt.legend()
plt.show()
插值
拉格朗日插值
import numpy as np
from scipy.interpolate import interp1d
import pylab as pl
#创建待插值的数据
x = np.linspace(0, 10*np.pi, 20)
y = np.cos(x)
# 分别用linear和quadratic插值
fl = interp1d(x, y, kind='linear')
fq = interp1d(x, y, kind='quadratic')
#设置x的最大值和最小值以防止插值数据越界
xint = np.linspace(x.min(), x.max(), 1000)
yintl = fl(xint)
yintq = fq(xint)
pl.plot(xint,fl(xint), color="green", label = "Linear")
pl.plot(xint,fq(xint), color="yellow", label ="Quadratic")
pl.legend(loc = "best")
pl.show()
#nearest:最近邻点插值
#linear:线性插值(缺省方式)
#spline:三次样条函数插值
#cubic: 分段三次Hermite插值
图形用户页面
Lable
from tkinter import *
top=Tk()
lab=Label(top,text="Hello World!")
lab.pack()
mainloop()
# 基本
#高级
from tkinter import *
top = Tk()
Label(top,text = 'bottom',compound = 'bottom',bitmap = 'error').pack()
#图像居上
Label(top,text = 'top',compound = 'top',bitmap = 'error').pack()
#图像居右
Label(top,text = 'right',compound = 'right',bitmap = 'error').pack()
#图像居左
Label(top,text = 'left',compound = 'left',bitmap = 'error').pack()
#文字覆盖在图像上
Label(top,text = 'center',compound = 'center',bitmap = 'error').pack()
mainloop()
Button
from tkinter import *
def Hello():
print("Hello World")
top=Tk()
Button(top,text="Orz",command=Hello).pack()
mainloop()
#基本
#按钮参数设置
from tkinter import *
top = Tk()
b1 = Button(top,text = '30X1',width = 30,height = 2)
b1.pack()
b2 = Button(top,text = '30X2')
b2['width'] = 30
b2['height'] = 3
b2.pack()
b3 = Button(top,text = '30X3')
b3.configure(width = 30,height = 4)
b3.pack()
mainloop()
复选框
from tkinter import *
def call():
if (v.get()==1):
print("OK")
else:
print("No")
top=Tk()
v=IntVar()
Checkbutton(top,variable=v,text="Hello World!",command=call).pack()
top.mainloop()
#版本2
from tkinter import *
top = Tk()
v = IntVar()
def Check():
if (v.get()==1):
print('check')
else:
print('uncheck')
Checkbutton(top,variable = v,text = 'test',command=Check).pack()
top.mainloop()
菜单
from tkinter import *
top=Tk()
def m1():
print("Hello")
def m2():
print("World")
def m3():
print("!")
#点击选项后的回调函数
c=[m1,m2,m3]
i=0
menubar=Menu(top)
filemenu=Menu(menubar,tearoff=0)
for j in ['a','b','c']:
filemenu.add_command(label=j,command=c[i]) #设置名称与对应函数
filemenu.add_separator()
i+=1
menubar.add_cascade(label="Choose",menu=filemenu) #设置总菜单名称
top['menu']=menubar
top.mainloop()
文本框
from tkinter import *
def insertBtn():
t.insert(1.0,'a line');
def readBtn():
l = t.get(1.0,END)
print(l)
top = Tk()
t = Text(top) #定义文本框
Button(top,text='insert',command=insertBtn).pack()
Button(top,text=' read ',command=readBtn).pack()
t.pack()
top.mainloop()
位置设置
from tkinter import *
root = Tk()
root.geometry('800x600') #窗口尺寸
#lb = Label(root,text = 'hello Place')
#lb.place(relx = 1,rely = 0.5,anchor = CENTER)
#使用相对坐标(0.5,0.5)将Label放置到(0.5*sx,0.5.sy)位置上
v=IntVar()
for i in range(5):
Button(root,text = 'Button' + str(i),).place(x = 80* i,y=80*i,anchor = NW)
root.mainloop()
本文地址: Python内容整理