算是大计基课程内容的简单总结

语法部分

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)
  1. sep
    在输出字符串之间插入指定字符串,默认是空格

例:

 print("a","b",sep="%")
  1. end
    在输出的结尾加上指定字符串,默认是换行(\n),若取消换行写''

例:

 print("a",end="%")
  1. file
    将文本输入到file-like对象中,可以是文件,数据流等等,默认是sys.stdout

例:

 fi=open('zht.out','w')
 print("a",file=fi)
  1. 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()

说点什么
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...