Python 14 复习环节

廉价感情. 提交于 2019-12-22 21:42:40

又到一年总结季,下周要考Python啦,整理一下老师给的ppt

Python Programing 03

代码块

  • 分支语句的作用范围可以是有限的
  • 使用代码块表示该作用范围
  • 代码块由缩进定义
  • 注意使用冒号
  • 同一代码块的缩进空格数要一致

Python Programing 04 函数,模块,简单文件读写

函数

  • 程序可能会很长很长
  • 同样的功能可能会多次执行
  • 把执行特定功能的模块封装起来就是函数
  • 便于修改,逻辑更加清晰,代码可以重用

lambda函数

  • lambda语句创建一个无名函数,并将该函数作为返回值
  • 在这里插入图片描述
  • 只能包含一个表达式,连if这样的结构都不支持
  • def语句中的函数名是预先设定好的。lambda语句则可以把产生的函数赋给任意一个变量名
  • lambda语句产生的函数也可以不占用变量名
  • 在这里插入图片描述

模块

  • 将一些函数或变量封装在.py文件中,以供调用

  • 比函数更高层次的封装

  • .py文件的名字就是模块的名字

  • 通过这种封装,可以避免单个.py文件过长

  • 自定义的模块应该放在主程序目录下

  • 模块的调用
    在这里插入图片描述

  • 模块被载入后成为了一个对象

  • 模块的意义:代码重用和管理(同函数);模块提供命名空间(作为对象来实现)

读取文本文件

#打开一个文件
input = open(‘file_name’, ‘r’)
#读取文件中的内容到一个字符串
content = input.read()
#关闭文件
input.close(

相对路径和绝对路径

  • 相对路径:以程序文件所在的位置为根目录
  • 绝对路径:从“C:\”写起
  • 路径的书写经常使用raw字符串:r‘xxx’

按行读取文件

line=input.readline()
  • 文件结尾处返回空字符串
lines=input.readlines()

写入文件

#以写入方式打开一个文件
output = open(‘file_name’, ‘w’)
#写入一行
output.write(‘one apple a day’ + ‘\n’)
#关闭文件
output.close()
  • 把数字转化成字符串写入
  • 在这里插入图片描述

从文件中读取数字

在这里插入图片描述

Python Programing 05 类与对象,异常处理

定义一个类

class 你的类:
xxx
xxx

在这里插入图片描述

方法中的指代

  • self——对象自己
  • super(类名称,self)——父类

产生对象

  • -使用赋值语句创建对象:
  • o1=C1()
  • o2=C1()

类的方法和对象的属性

  • 类中定义的函数称为方法
  • 方法可以理解为类的行为
  • 对象可以含有一些变量(可能是方法产生的),称为属性
  • 属性是属于个体的

类的继承

class 类的名字(父类的名字):
xxx
xxx
  • 父类中的方法将被子类继承
    在这里插入图片描述

继承多个父类

class C1(C2,C3):......
  • 当C2和C3中存在同名内容时,以C2为准

多态:同样的接口,不同的方法

  • 水果.切
  • 西瓜.切
  • 橙子.切
  • 榴莲.切
  • 同名方法的搜索:自下而上

钩子

  • 类中,以__XXX__为名的函数称为钩子
  • 重载钩子函数可以实现特殊功能

构造函数

  • __init__()
  • 对象产生时会自动运行这个函数

异常处理

  • 异常:可以改变程序中控制流程的事件
  • 异常是一种特殊分支
  • 一般是某种错误或者失败发生
  • Python可以自动处理异常,处理方法是立即终止程序,并且报告问题类型和位置
  • 我们可以手动定义异常处理的方式

异常处理的基本语法

  • try观察一段代码,尝试捕捉其中发生的异常
  • except 相应某种异常,或者所有的异常
  • finally 无论异常是否发生,总会运行这里的代码
  • else 如果try内的语句未发生异常,则执行
  • 在这里插入图片描述

异常捕获机制

  • 按先后顺序尝试捕获异常
  • 如果一条except不响应这个异常,则向后传递
  • 如果没有语句响应这个异常,则Python系统处理
  • 在这里插入图片描述

Python Programing 06 Ipython,Numpy,Scipy

Ipthon

  • 安装:cmd下输入pip install ipython
  • 运行:cmd下输入ipython输入查看帮助文档

Tab键自动完成

  • 键入一些内容之后,按Tab键,显示可能的变量或者函数名;
  • 也可以用于显示模块中有哪些可调用的方法或常量:
import math
math.[Tab]

内省

在这里插入图片描述

中断执行的代码

  • 当代码死循环时可以用ctrl + C退出运行

命令历史

-按↑可以调出上一条指令

找回忘记保存的变量

在这里插入图片描述

魔术命令

  • List item

用Ipython运行文件

  • %run+路径+文件名
  • %run D:/test.py

在交互模式下运行大段代码

  • 默认情况下,交互模式只能一条一条执行代码,不能把一段代码复制粘贴到交互模式运行
  • 使用%cpaste命令来执行多行代码
  • 或者直接使用%paste命令来执行当前剪贴板中的内容

Numpy

  • 在cmd下通过pip install numpy安装
  • import numpy as np来载入

多维数组array

  • NumPy的核心就是这个多维数组array
    Python自带的数组是弱类型的,可以存放不同类型的内容,因此无法进行某些运算,如矩阵相乘
    array是一个同结构数据的多维容器
    每个array数组都有一个shape和一个dtype属性,分别记录其各维度大小以及数据类型
  • 创建array序列
d=[1,2,3]
arr=np.array(d)
  • 指定array的类型
arr1 = np.array([1,2,3], dtype = np.float64)
arr2 = np.array([1,2,3], dtype = np.int32)

索引和切片

  • 二维数组可以索引两次
  • np的索引和切片不复制内容
  • 复制:.copy()

Scipy

  • 通过在cmd下输入pip install scipy安装

Python Programing 07 Pandas数据处理

Pandas

  • 基于Numpy构建
  • 包含SeriesDataFrame两种数据结构,以及相应的方法
  • 调用方式
from pandas import Series,DataFrame
import pandas as pd

创建Series

  • 常规创建
obj2 = Series([2,2,3,3], index = [‘a’, ‘b’, ‘c’, ‘d’])
  • 以字典创建
d = {‘a’:123, ‘b’:456, ‘c’ :789}
obj3 = Series(d)
states = [‘a’, ‘c’, ‘d’]

DataFrame

  • 很像一个Excel表格
  • 含有一组有序的列
  • 列内同构,列之间可以是不同的数据类型
  • 既有列索引,也有行索引
  • 以二维结果保存数据(高维数据视作二维表格的叠加)
  • 创建DataFrame
d = {‘name’: [‘Bob’, ‘Jack’, ‘Lili’, ‘Dongwei’],
        ‘age’: [28, 33, 22, 88],
        ‘salary’:[3000, 2, 5000, 999999999]}
frame1 = DataFrame(d)
frame2 = DataFrame(d, columns = [‘age’, ‘name’, ‘salary’])
frame3 = DataFrame(d, index = [01,02,03,04])
  • 给列赋值
frame3[‘IQ’] = [110, 70, 100, 999] #长度必须匹配
  • 按行索引
somebody = frame3.ix[02]
  • 丢弃指定行或列
frame4  = frame3.drop(‘IQ’, axis = 1)  #丢弃列
frame5  = frame3.drop(02)
  • 插入列
s = Series([1,2,3])
frame5.insert(1, ‘aaa’, s)
  • 两个index的运算
append #连接
difference #差集
intersection #交集
union #并集
  • 过滤
frame6 = frame3[frame3[‘age’] > 30]
  • 按索引排序
obj6 = obj3.sort_index()
frame 10 = frame3. sort_index()
frame 11 = frame3. sort_index(axis = 1)
  • 处理缺失数据
手工产生NaN值:np.nan
x2 = x.dropna() #剔除含NaN的行
x2 = x.fillna(0) #以0替换NaN
x2 = x.fillna({‘a’:-1, ‘c’:0}) #对于’a’列’c’列分别操作
x2 = x.fillna(method = ‘ffill’) # 以插值替换NaN
  • 统计汇总
s1 = frame3.sum() #按列小计
s2 = frame3.sum(axis = 1) #按行
  • 合并数据集

在这里插入图片描述

Python Programing 08 数据读写

Numpy读写矩阵

np.save(文件名,矩阵)
np.load(文件名)

在这里插入图片描述

  • pandas读取csv表格
pd.read_csv(文件名)#读取csv表格,自动类型推断
  • pandas写入csv表格
frame.to_csv(文件名)

处理畸形的csv文件

  • 当csv文件结构有问题时,pd.read_csv函数无法读取
  • 使用上述方法读入文件,然后进行整理,最后转化成DataFrame

pandas读取二进制文件

frame.save(文件名)
pd.load(文件名)

pandas读写Excel文件

xls_file = pd.ExcelFile(‘data.xls’)
table = xls_file.parse(‘Sheet1’)

读取JSON文件

在这里插入图片描述

读取xml

  • 使用lxml库来解析xml
from lxml import objectify
parsed = objectify.parse(open('cd_catalog.xml'))
root=parsed.getroot()
  • 可用函数:getchildren() x.tag

读取html

from lxml.html import parse
from urllib.request import urlopen
parsed = parse(urlopen('http://www.zufe.edu.cn/))
doc = parsed.getroot()
links = doc.findall('.//a’)
links[0].get('href’)
links[0].text_content()

读取html中的table

parsed = parse(urlopen('http://info.zufe.edu.cn/xygk/szdw.htm’))
doc = parsed.getroot()
tables = doc.findall(.//table’).//tr’   ‘.//td’

Python Programing 09 数据绘图

matplotlib绘图

  • 载入
import matplotlib.pyplot as plt
  • 载入图片
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(np.arange(10))
fig.show()
  • 管理subplot
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
#参数:行数,列数,第几个
  • 调节subplot间距
fig.subplots_adjust(wspace = 0.5)
#可用参数:left  right  bottom  top  wspace  hspace
  • 绘制各种图像
from numpy.random import randn
ax1.plot(randn(50).cumsum())#折线图
ax2.hist(randn(100), bins = 20)#柱状图
ax3.scatter(randn(50), randn(50))#散点图
fig.show()
  • 颜色标记线型
ax1.plot(randn(50).cumsum(), linestyle =--, color = ‘g’, marker = ‘o’ )
  • 设置坐标轴范围
ax1.set_xlim([0,100])
ax1.set_ylim([-1,1])
  • 设置刻度标签和具体刻度
ticks = ax1.set_xticks([0,20,40,60,80,100])
labels = ax1.set_xticklabels([‘zero’, ‘one’, ‘two’, ‘three’, ‘four’, ‘five’], rotation = 30)
  • 设置标题和轴标签
ax1.set_title('fig 1)
ax1.set_xlabel(‘Step’)
ax1.set_ylabel(‘Value’)
fig.show()
  • 添加图例
ax4 = fig.add_subplot(2,2,4)
ax4.plot(randn(1000).cumsum(), ‘k’, label = ‘one’)
ax4.plot(randn(1000).cumsum(), ‘r., label = ‘two’)
ax4.legend(loc = ‘best’)
fig.show()
  • 绘制形状
rect = plt.Rectangle((0.2,0.75), 0.4, 0.15, color = ‘g’, alpha = 0.2)
ax.add_patch(rect)
  • 保存图片
fig.savefig(‘xxx.svg’, dpi = 400, bbox_inches = ‘tight’)
  • 在这里插入图片描述

pandas绘图

from pandas import  Series, DataFrame
import pandas as pd
df = DataFrame(randn(10,4).cumsum(0), columns = [‘A’, ‘B’, ‘C’, ‘D’], index = np.arrange(0,100,10))
df.plot()

读入Matlib图片

import scipy.io as sio
raw_K=sio.loadmat('Subject1K.mat')
raw_V=sio.loadmat('Subject1V.mat')
k = raw_K['Subject1K']
v = raw_V['Subject1V']

Python Programing 10 PyQt信号和槽

我们选择的GUI库:PyQt5

  • PyQt安装:在cmd下输入pip install pyqt5
  • 第一个例子
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class Form(QDialog):
	def __init__(self,parent=None):
		super().__init__(parent)
app=QApplication(sys.argv)
form=Form()
form.show()
app.exec_()		

在这里插入图片描述

  • 第二个例子:计算器
import sys
from math import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class Form(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.text = QLabel('AAA')
        self.browser = QTextBrowser()
        self.lineedit = QLineEdit("Type an expression.")
        self.lineedit.selectAll()
        layout = QVBoxLayout()
        layout.addWidget(self.text)
        layout.addWidget(self.browser)
        layout.addWidget(self.lineedit)
        self.setLayout(layout)
        self.lineedit.setFocus()
        self.lineedit.returnPressed.connect(self.updateUi)
        self.setWindowTitle("Calculate")
    def updateUi(self):
        try:
            text = str(self.lineedit.text())
            self.browser.append("%s = <b>%s</b>" % (text, eval(text)))
        except:
            self.browser.append("<font color=red>%s is invalid!</font>" % text)

app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()

在这里插入图片描述

Qt类

  • Qt类的继承关系:各种控件类都继承自QWidget QWidget继承自QObject

常见的控件

  • QPushButton:按钮
    QLabel:文本标签(不能交互)
    QLineEdit:单行文本框控件
    QTextEdit:多行文本控件
    QCheckBox:勾选框
    QSlider:滑动条

信号

在这里插入图片描述
-信号就是信号类型的对象

信号和槽链接的方式

  • 发出对象.信号名.connect(接收对象.槽名)

第三个例子:汇率

import sys
import urllib.request
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class Form(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)

        date = self.getdata()
        rates = sorted(self.rates.keys())

        dateLabel = QLabel(date)
        self.fromComboBox = QComboBox()
        self.fromComboBox.addItems(rates)
        self.fromSpinBox = QDoubleSpinBox()
        self.fromSpinBox.setRange(0.01, 10000000.00)
        self.fromSpinBox.setValue(1.00)
        self.toComboBox = QComboBox()
        self.toComboBox.addItems(rates)
        self.toLabel = QLabel("1.00")
        grid = QGridLayout()
        grid.addWidget(dateLabel, 0, 0)
        grid.addWidget(self.fromComboBox, 1, 0)
        grid.addWidget(self.fromSpinBox, 1, 1)
        grid.addWidget(self.toComboBox, 2, 0)
        grid.addWidget(self.toLabel, 2, 1)
        self.setLayout(grid)
        self.fromComboBox.currentIndexChanged.connect(self.updateUi)
        self.toComboBox.currentIndexChanged.connect(self.updateUi)
        self.fromSpinBox.valueChanged.connect(self.updateUi)
        self.setWindowTitle("Currency")
        
    def updateUi(self):
        to = self.toComboBox.currentText()
        from_ = self.fromComboBox.currentText()
        amount = ((self.rates[to]/self.rates[from_])*self.fromSpinBox.value())
        self.toLabel.setText("{0:.2f}".format(amount))
        
    def getdata(self): 
        self.rates = {}
        try:
            date = "Unknown"
            data = urllib.request.urlopen("https://www.gov.uk"
                  "/government/uploads/system/uploads"
                  "/attachment_data/file/702273"
                  "/exrates-monthly-0518.csv").read()
            for line in data.decode("utf-8", "replace").split("\n"):
                line = line.rstrip()
                if not line or line.startswith(("#", "Closing ", "Country")):
                    continue
                fields = line.split(",")
                if line.startswith("China"):
                    date = fields[-1]
                else:
                    try:
                        value = float(fields[3])
                        self.rates[fields[0]] = value
                    except ValueError:
                        pass
            return "Exchange Rates Date: " + date
        except Exception as e:
            return "Failed to download:\n{}".format(e)

app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()

在这里插入图片描述

Python Programing 11 PyQt5对话框,控件

QLabel

self. aLabel = QLabel(self)
self. aLabel. setText(“AAA”)
self. aLabel.setPixmap( QPixmap(“a.jpg"))

QSpinBox,QDoubleSpinBox 数字框

self.mySpinBox = QDoubleSpinBox(self)
self.mySpinBox. setRange(1, 1000000000)
self.mySpinBox.setValue(1000)
self.mySpinBox.valueChanged.connect(self.updateUi)

QSlider 滑动条

设置:setMinimum,setMaximum,setSingleStep,setValue
信号:valueChanged
读取:v = self.mySlider.value()

QLineEdit,QTextEdit 可编辑文本框

self.lineedit = QLineEdit("Type a string.")
self.lineedit.returnPressed.connect(self.updateUi)
s = self.lineedit.Text()

QTextBrowser 不可编辑文本框

self.browser = QTextBrowser()
self.browser.append(‘aaa’)

QListWidget 选单

self.listWidget = QListWidget(self)
self.listWidget.addItems(['item1', 'item2', 'item3'])
self.listWidget.itemClicked.connect(self.XXX)

QComboBox 下拉选单

self.comboBox = QComboBox(self)
itemdata = ['item0', 'item1', 'item2']
self.comboBox.addItems(itemdata)
self.comboBox.currentIndexChanged.connect(self.updateUi)

QPushButton 按钮

self.okButton = QPushButton(self)
self.okButton. setText(“OK")
self.okButton.clicked.connect(self.accept)

QHLayOut,QVLayOut 横,纵向布局

self.layout = QVBoxLayout(self)
self.layout.addWidget(xxx)
self.setLayout(layout)

QGridLayOut 矩阵式布局

self.layout = QGridLayout(self)
self.layout.addWidget(myLabel, 0, 0)
self.layout.addWidget(mySpinBox, 0, 0)
self.setLayout(layout)

QSpacerItem 弹簧

s = QSpacerItem(20, 20, QSizePolicy.Minimum, QSizePolicy.Expanding)
layout.addSpacerItem(s)

利用弹出式对话框获得信息

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class PenPropertiesDlg(QDialog):
    def __init__(self, parent=None):
        super(PenPropertiesDlg, self).__init__(parent)
        widthLabel = QLabel("&Width:")
        self.widthSpinBox = QSpinBox()
        widthLabel.setBuddy(self.widthSpinBox)
        self.widthSpinBox.setAlignment(Qt.AlignRight|Qt.AlignVCenter)
        self.widthSpinBox.setRange(0, 24)
        self.beveledCheckBox = QCheckBox("&Beveled edges")
        styleLabel = QLabel("&Style:")
        self.styleComboBox = QComboBox()
        styleLabel.setBuddy(self.styleComboBox)
        self.styleComboBox.addItems(["Solid", "Dashed", "Dotted", "DashDotted", "DashDotDotted"])
        okButton = QPushButton("&OK")
        cancelButton = QPushButton("Cancel")

        buttonLayout = QHBoxLayout()
        buttonLayout.addStretch()
        buttonLayout.addWidget(okButton)
        buttonLayout.addWidget(cancelButton)
        layout = QGridLayout()
        layout.addWidget(widthLabel, 0, 0)
        layout.addWidget(self.widthSpinBox, 0, 1)
        layout.addWidget(self.beveledCheckBox, 0, 2)
        layout.addWidget(styleLabel, 1, 0)
        layout.addWidget(self.styleComboBox, 1, 1, 1, 2)
        layout.addLayout(buttonLayout, 2, 0, 1, 3)
        self.setLayout(layout)
        self.setWindowTitle("Pen Properties")

        okButton.clicked.connect(self.accept)
        cancelButton.clicked.connect(self.reject)


class Form(QDialog):
    def __init__(self, parent=None):
        super(Form, self).__init__(parent)
        self.width = 1
        self.beveled = False
        self.style = "Solid"

        penButton = QPushButton("Set Pen")
        self.label = QLabel("The Pen has not been set")
        self.label.setTextFormat(Qt.RichText)
        layout = QVBoxLayout()
        layout.addWidget(penButton)
        layout.addWidget(self.label)
        self.setLayout(layout)
        self.setWindowTitle("Pen")
        penButton.clicked.connect(self.setPenProperties)
        self.updateData()

    def updateData(self):
        bevel = ""
        if self.beveled:
            bevel = "<br>Beveled"
        self.label.setText("Width = {}<br>Style = {}{}".format(self.width, self.style, bevel))

    def setPenProperties(self):
        dialog = PenPropertiesDlg(self)
        dialog.widthSpinBox.setValue(self.width)
        dialog.beveledCheckBox.setChecked(self.beveled)
        dialog.styleComboBox.setCurrentIndex(
                dialog.styleComboBox.findText(self.style))
        if dialog.exec_():
            self.width = dialog.widthSpinBox.value()
            self.beveled = dialog.beveledCheckBox.isChecked()
            self.style = dialog.styleComboBox.currentText()
            self.updateData()


app = QApplication(sys.argv)
form = Form()
form.resize(400, 200)
form.show()
app.exec_()

在这里插入图片描述
在这里插入图片描述

Python Programing 12 PyQt主窗口编程

图像类

image = QImage(fname)
imageLabel = QLabel()
imageLabel.setPixmap(QPixmap.fromImage(image))

状态栏

在这里插入图片描述

菜单栏

在这里插入图片描述

工具栏

在这里插入图片描述

动作

在这里插入图片描述

动作组

在这里插入图片描述

Python Programing 13 Qt Designer

  • 安装:pip3 install PyQt5_tools
  • 打开Qt Designer方式指路:打开QD
  • 完成的设计保存为.ui文件,需要转化为.py文件才可以使用。命令:
pyuic5 -o 1.py 1.ui
  • 不要修改转换得到的.py文件

设计步骤

在这里插入图片描述

对话框的实现

在这里插入图片描述

对话框的测试

在这里插入图片描述
大概就是这样了,下周上机考了1551
书于吃了玉米水饺就不会冻耳朵的冬至

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!