课程名称:Python程序设计
课程性质:限制性选修
考核方式:考查
建议学时:48+32
前导课程:数据结构、数据库原理、计算机网络、计算机图形学、操作系统、软件工程等
适用专业:计算机科学与技术、软件工程、网络工程、通信工程、数字媒体技术大数据应用技术及其他工科专业
一、教学目的和要求
通过本课程的学习,使得学生能够理解Python的编程模式,尤其是函数式编程模式,熟练运用Python内置函数与运算符、列表、元组、字典、集合等基本数据类型以及相关列表推导式、切片等语法来解决实际问题,熟练掌握Python分支结构、循环结构、函数设计以及类的设计与使用,熟练使用正则表达式处理字符串,同时使得学生掌握不同领域的Python扩展模块并能够解决文件操作、大数据处理、图形图像处理、音乐编程与语音识别、多线程编程、数据库编程、网络编程、逆向工程与软件分析、科学计算可视化、密码学、安卓等领域中的实际问题,同时还应培养学生的代码优化与安全编程意识。
二、教学中应注意的问题
Python编程模式中非常重要的一条是代码简单化、问题简单化,同时应保证代码具有较强的可读性。在教学过程中,一定不要在Python程序中带有其他编程语言的痕迹,要尽量从最简单的角度去思考和解决问题、实现自己的想法和思路,保证代码的优雅、简洁,让代码更加Pythonic。
使用Python编程解决问题应充分借鉴和使用成熟的标准库和扩展库,尽量避免自主编写完整的业务逻辑,部分具体操作完全可以使用扩展库来实现,大幅度提高开发效率。例如,如果需要进行排序则直接使用内置函数或方法进行排序,切不可再使用选择法排序、冒泡法排序或堆排序等排序算法来编写代码实现;如果要测试一段代码的运行事件,应使用标准库time中的有关函数;要测试一个年份是否为闰年,应使用calendar标准库中的函数;要进行图像处理,应使用扩展库pillow;要进行计算机图形学编程,应使用扩展库pyopengl;要进行数据分析,应使用pandas扩展库;要进行数据可视化与科学计算可视化,应使用matplotlib扩展库;要进行编写爬虫程序,应使用requests、BeautifulSoup、scrapy扩展库;等等。
三、教学内容
建议第一篇的前8章都讲,第二篇中的部分章节可以根据培养方向和目标进行选讲。
第一篇 Python基础
第1章 基础知识
1.1 Python语言版本之争
教学重点:如何选择正确的Python版本。
1.2 Python安装与简单使用
教学重点:Windows平台的Python安装。
1.3 使用pip管理扩展库
教学重点:使用pip安装和管理Python扩展库。
1.4 Python基础知识
教学重点:Python对象模型,Python变量,Python自动内存管理功能,数字、字符串基本知识,Python运算符与表达式,常用Python内置函数,基本输入输出,Python模块的导入与使用。
1.5 Python代码编写规范
教学重点:缩进和空格、空行在Python程序中的作用和重要性,注释的形式和注释的作用,测试驱动的程序设计方式。
1.6 Python文件名
教学重点:.py、.pyc等文件名的作用,Python伪编译,Python 3.5之后不再使用.pyo文件。
1.7 Python程序的运行方式
教学重点:根据__name__属性来确定Python程序的运行方式。
1.8 编写自己的包
教学重点:Python程序的组织方式。
1.9 Python快速入门
教学重点:Python程序设计入门,了解运算符和表达式以及模块中方法的用法。
1.10 The Zen of Python
第2章 Python数据结构
2.1 列表
教学重点:列表对象的创建与删除,列表元素的增加与删除,列表元素访问与计数,有序序列的双向索引,成员资格判断运算符in,切片操作,列表排序,列表推导式。
2.2 元组
教学重点:元组对象的创建与删除,元组与列表的区别,序列解包,生成器推导式。
2.3 字典
教学重点:字典对象的创建与删除,字典元素的读取,字典元素的添加与修改,有序字典对象的使用,使用字典来计数。
2.4 集合
教学重点:集合对象的创建与删除,集合的并、交、差以及对称差等运算,使用集合来提取序列中的唯一元素。
2.5 其他数据结构(选讲)
教学重点:栈、队列、堆、链表、二叉树、图等数据结构的实现。
第3章 选择与循环
3.1 运算符与条件表达式
教学重点:Python运算符,条件表达式。
3.2 选择结构
教学重点:单分支选择结构、双分支选择结构、多分支选择结构、选择结构的嵌套。
3.3 循环结构
教学重点:for循环、while循环,range对象在循环中的使用,成员测试符in在循环语句中的使用,带有else子句的循环结构,循环代码的优化。
3.4 break和continue语句
教学重点:break和continue语句的作用。
3.5 综合运用
第4章 字符串与正则表达式
4.1 字符串
教学重点:字符串编码,字符串格式化,find()、index()、split()、join()、replace()、translate()、strip()、startswith()、endswith()、center()、ljust()、rjust()等字符串常用方法,字符串常量,可变字符串。
4.2 正则表达式
教学重点:正则表达式元字符,re模块常用方法,正则表达式对象,正则表达式子模式扩展语法。
第5章 函数设计与使用
5.1 函数定义
教学重点:Python函数的定义形式。
5.2 形参与实参
教学重点:形参与实参的概念。
5.3 参数类型
教学重点:默认值参数,关键参数,可变长度参数,参数传递时的序列解包。
5.4 return语句
教学重点:如果函数中没有(或没有执行)return语句或者执行了没有返回值的return语句,则将被认为返回空值None。
5.5 变量作用域
教学重点:局部作用域,全局作用域,nonlocal变量。
5.6 lambda表达式
教学重点:使用lambda表达式声明匿名函数和命名函数,在lambda表达式中调用函数,把lambda表达式作为函数参数。
5.7 高级话题
教学重点:map()、reduce()、filter()、yield语句,dis模块。
第6章 面向对象程序设计
6.1 类的定义与使用
教学重点:Python类的定义,self与cls参数,类成员与实例成员,私有成员与公有成员。
6.2 类的方法
教学重点:类方法,实例方法,静态方法,修饰器。
6.3 类的属性
教学重点:属性的定义与使用,使用属性和公开数据成员的区别。
6.4 类的特殊方法
教学重点:Python类特殊方法与运算符的对应关系。
6.5 继承机制
教学重点:Python支持多继承,如果多个父类中有相同名字的成员,Python解释器将按照从左向右的顺序在所有父类中进行搜索,并且使用第一个遇到的成员。
第7章 文件操作
7.1 文件基本操作
教学重点:文本文件与二进制文件的区别,open()方法以及flush()、close()、read()、write()等文件对象常用方法。
7.2 文本文件基本操作
教学重点:read()、write()、seek()等文件对象常用方法的运用。
7.3 二进制文件操作
教学重点:二进制文件读写方式,序列化模块pickle与struct。
7.4 文件操作
教学重点:os与os.path与shutil模块中方法的运用,判断文件是否存在,文件路径分割与连接,文件重命名,文件复制。
7.5 目录操作
教学重点:os模块常用方法,当前目录的查看与修改,文件夹的创建与删除,文件夹遍历的几种方式。
7.6 高级话题
教学重点:CRC32与MD5计算,文件相似度计算,文件类型检测,Excel文件操作,Word文件操作。
第8章 异常处理结构与程序调试
8.1 基本概念
教学重点:异常的概念与表现形式。
8.2 Python异常类与自定义异常
教学重点:Python内建异常类,自定义异常类。
8.3 Python中的异常处理结构
教学重点:常见异常处理结构,异常处理代码中可能再次引发异常。
8.4 断言与上下文管理
教学重点:assert与with语句。
8.5 用sys模块回溯最后的异常
8.6 使用IDLE调试代码
教学重点:IDLE调试界面操作。
8.7 使用pdb模块调试程序(选讲)
教学重点:pdb常用命令,使用交互模式、命令行模式、程序中嵌入断点等几种方式使用pdb调试功能。
第二篇 Python高级编程与应用
第9章 GUI编程(选讲)
9.1 wxPython
教学重点:wxPython基础知识,Frame的概念与作用,控件与事件处理函数的编写与绑定。按钮、静态文本框、文本框、菜单、工具条、状态条、对话框、单选钮、复选框、组合框、列表框、树形控件的用法。
9.2 tkinter精彩编程
教学重点:tkinter组件用法,tkinter案例。
第10章 网络程序设计
10.1 计算机网络基础知识
教学重点:OSI参考模型,TCP/IP协议族,网络协议三要素,IP地址与MAC地址。可根据需要进行适当扩充。
10.2 UDP和TCP编程
教学重点:UDP协议与TCP协议的区别与实现,socket模块的应用。
10.3 简单嗅探器实现
教学重点:嗅探器工作原理,网卡混杂模式。
10.4 网页内容读取
教学重点:urllib模块的应用,读取网页内容。
10.5 使用Python开发网站
教学重点:IIS配置,ASP文件嵌入Python代码。
10.6 使用web2py框架开发网站
第11章 大数据处理(选讲)
11.1 大数据框架
教学重点:MapReduce、Hadoop、Spark等大数据处理平台或框架基础知识,可根据需要进行适当扩充。
11.2 Map/Reduce编程案例
教学重点:Map、Reduce思路。
第12章 Windows系统编程(选讲)
12.1 注册表编程
教学重点:Windows注册表基本概念与相关知识,win32api、win32con模块方法的应用。
12.2 创建exe可执行文件
教学重点:py2exe、distutils模块的应用,控制台应用程序与GUI应用程序打包方式的不同。
12.3 调用外部程序
教学重点:os模块的system()、popen()、startfile()方法,win32api模块的ShellExecute()方法,win32process模块,使用ctypes模块调用动态链接库或共享库中的函数。
12.4 创建窗口
教学重点:win32gui、win32api、win32con等模块的应用,使用不同方式创建应用程序窗口。
12.5 判断操作系统版本
第13章 多线程编程
13.1 threading模块
教学重点:多线程概念,threading模块基本用法。
教学难点:线程数量不是越多越好。
13.2 Thread对象
教学重点:Thread对象,创建线程的方法,join()方法,daemon属性。
13.3 线程同步技术
教学重点:线程同步技术,Lock/RLock对象,Condition对象,Queue对象,Event对象。
第14章 数据库编程
14.1 SQLite应用
教学重点:SQLite数据库概念,如何在Python中使用SQLite数据库,Connection对象,Cursor对象,Row对象。
14.2 访问其他类型数据库
教学重点:使用pywin32操作ACCESS数据库和MSSQLServer数据库,使用pymssql操作MSSQLServer数据库,使用MySQLDb操作MySQL数据库,SQL语句的编写。
第15章 多媒体编程
15.1 图形编程
教学重点:PyOpenGL模块的使用,图形编程框架的搭建,绘制文字,绘制基本图形,纹理映射,键盘与鼠标事件的接收和处理。
15.2 图像编程
教学重点:PIL模块与pillow模块,图像文件的打开、保存与显示,图像信息查看,图像点运算,图像格式转换,图像缩放、旋转、增强、裁剪与粘贴,图像滤波、边缘提取、对比度调整。
15.3 音乐编程(选讲)
教学重点:pygame模块,音乐播放器的设计与实现。
15.4 语音识别(选讲)
教学重点:speech模块,语音识别。
第16章 逆向工程与软件分析(选讲)
16.1 主流项目与插件简介
教学重点:逆向工程与软件分析的重要性,主流软件和插件介绍。
16.2 IDAPython与Immunity Debugger编程
教学重点:IDAPython插件的安装与使用,PE文件的概念及其在Windows平台的地位,使用IDAPython简单分析PE文件;Immunity Debugger调试器的使用与简单操作,使用Immunity Debugger寻找PE文件中的循环、打包器或指令。
教学难点:ROP攻击以及ROP Gadgets简单识别。有些内容需要查阅PE文件规范,并要求学生了解汇编语言的基本语法和有关指令。
16.3 Windows平台软件调试原理
教学重点:Windows调试接口,调试事件的概念,进程调试原理,线程环境或上下文的读取与修改,断点概念与类型。
16.4 案例精选
第17章 科学计算与可视化
17.1 numpy简单应用
教学重点:numpy模块的安装与使用,数据与标量数值的计算,数据与数组的算数运算,数组转置,向量内积,数组元素访问,矩阵不同维度上的求和与均值计算以及最大值、最小值的查找,标准差与方差计算,数组切片与布尔运算,加权平均值的计算。
17.2 scipy简单应用
教学重点:scipy模块的安装与使用,常数与特殊函数的使用,使用scipy实现中值滤波。
17.3 matplotlib简单应用
教学重点:matplotlib模块的安装与使用,正弦曲线与散点图的绘制,图形显示模式的设置,三维图形绘制。
第18章 密码学编程
18.1 安全哈希算法
教学重点:MD5算法,标准库hashlib,扩展库pycrypto和pycryptodome。
18.2 对称密钥密码算法DES和AES
教学重点:DES和AES算法原理与应用。
18.3 非对称密钥密码算法
教学重点:RSA、DSA算法原理与应用。
第19章 安卓编程(选讲)
19.1 QPython简介
教学重点:QPython安装与使用
19.2 安卓应用开发案例
教学重点:android、androidhelper、sl4a、kivy模块的应用。
四、教学课时分配
教学课时分配表(参考)
章 节 名 称 | 课堂学时 | 实验学时 | 课外学时 |
---|---|---|---|
第1章 Python基础 | 4 | 2 | |
第2章 Python数据结构 | 4 | 2 | 4 |
第3章 选择与循环 | 4 | 2 | 2 |
第4章 字符串与正则表达式 | 4 | 2 | 2 |
第6章 函数设计与使用 | 4 | 2 | 2 |
第6章 面向对象程序设计 | 4 | 2 | 2 |
第7章 文件操作 | 6 | 2 | 4 |
第8章 异常处理结构与程序调试 | 2 | ||
第9章 GUI编程(选讲) | 2 | 2 | 4 |
第10章 网络程序设计 | 2 | 2 | |
第11章 大数据处理(选讲) | 2 | 2 | |
第12章 Windows系统编程(选讲) | 2 | 2 | 4 |
第13章 多线程编程 | 4 | 2 | 4 |
第14章 数据库编程 | 2 | 2 | 2 |
第15章 多媒体编程 | 4 | 2 | 4 |
第16章 逆向工程与软件分析(选讲) | 2 | 2 | |
第17章 科学计算与可视化(选讲) | 4 | 2 | 4 |
第18章 密码学编程 | 2 | 2 | 4 |
第19章 安卓编程(选讲) | 2 | 4 |
五、教材与参考书目
教材:
1. 董付国.《Python程序设计(第2版)》,清华大学出版社,2016
参考书目:
1. 董付国.《Python程序设计开发宝典》,清华大学出版社,2017
2. 董付国.《Python可以这样学》,清华大学出版社,2017
3. 董付国.《玩转Python轻松过二级》,清华大学出版社,2018
4. 张颖,赖勇浩著.《编写高质量代码——改善Python程序的91个建议》.机械工业出版社,2014
5. 杨佩璐,宋强等编著.《Python宝典》.电子工业出版社,2014
6. 张若愚著.《Python科学计算》.清华大学出版社,2012
7. 李锐,李鹏,曲亚东等译.《机器学习实战》.人民邮电出版社.2013