# Practical_Python_Programming **Repository Path**: luyijun1206074121/Practical_Python_Programming ## Basic Information - **Project Name**: Practical_Python_Programming - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-05-30 - **Last Updated**: 2021-04-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 北京邮电大学“Python编程与实践”课程(2020) - 课程名称:Python编程与实践 - 教师:陈光 ([@爱可可-爱生活](https://weibo.com/fly51fly)) - 时间:周五上午 8:00-9:35 本课程旨在通过编程学习Python,在解决问题的过程中了解Python编程的基础知识。一起编程,一起爱上Python。 推荐参考书:
[《Think Python 2nd Edition》 by Allen B. Downey](https://greenteapress.com/wp/think-python-2e/)   中文版: [免费在线浏览](https://codingpy.com/books/thinkpython2/index.html) 课程视频(Bilibili):[ 北邮陈光《Python编程与实践》(2020)](https://www.bilibili.com/video/BV1b7411N7P2) | 日期 | 内容 | 视频 | | ---- | ---- | ---- | | 2020.2.28 | 第1讲:轻松起航,一起爱Python
摘要:为什么要学编程?为什么是Python?有啥缺点吗?有什么“用武之地”?为什么是我?参考什么书?该怎么学?实践体验入门    [PPT下载](https://github.com/fly51fly/Practical_Python_Programming/blob/master/slides/001Introduction.pptx)
![第一课题图](https://github.com/fly51fly/Practical_Python_Programming/blob/master/images/class_1_001.jpg)| [L1](https://www.bilibili.com/video/av92186118?p=1) | | - | 零基础安装配置Anaconda开发环境
摘要:Anaconda及相关概念介绍;Python 2.x和3.x的故事及如何选择;Anaconda国内镜像的使用;Anaconda基本组件的介绍和实战;Python的交互式、批量式运行方式介绍;Jupyter Notebooks使用初步;conda使用初步 | [L1.1](https://www.bilibili.com/video/av92186118?p=2) | | 2020.3.6 | 第2讲:初次尝试
摘要:如何做到“聪明地努力学习”?Python最常用的知识是什么?实战入门第一站。
![第二课思维导图](https://github.com/fly51fly/Practical_Python_Programming/blob/master/images/class_2_001.jpg)| [L2](https://www.bilibili.com/video/av92186118?p=3) | | - | 第2讲答疑([问题列表](https://github.com/fly51fly/Practical_Python_Programming/blob/master/questions/question_002.md))
摘要: 缩进相同但不挨着的代码什么关系、代码缩进用空格还是Tab、字符串里的%%什么意思、Python和之前学习的其他语言混淆怎么办、pass是什么、如何命名可改善可读性、Python代码块区分是否只能用缩进、新手应该多学几种语言还是专攻一种、如何判断代码出错位置、Python中的变量内涵是什么、a+a内部是怎么处理的、Python里是不是只能用半角、命令行运行和notebook运行有何区别、怎么写.py文件、Python适用的应用场景、in的使用、去哪里找练习题、print输出格式的控制、一行代码里两个print为什么会自动换行、如何锻炼分析问题的抽象思维、如何整体运行代码、random库的其他用法、Python代码安全性问题、Jupyter Notebook核连不上的问题、Python中[]和()的区别、随机数是否可用时间生成、如何更改cell的执行顺序、显示[*]不运行是咋回事、有什么知名Python项目、学习应以自学为主还是以课程内容为主、Python和C++的最大区别、关键字和关键语句的掌握 | [L2.1](https://www.bilibili.com/video/av92186118?p=4) | | - | 聊聊Python的“四大皆空”
摘要:把Python语言里四个“看不见”和“没用”的东西拢成一堆儿聊一聊,希望能帮你解开一些日常的小迷惑
![四大皆空脑图](https://github.com/fly51fly/Practical_Python_Programming/blob/master/images/class_2_002.jpg) | [L2.2](https://www.bilibili.com/video/av92186118?p=5) | | 2020.3.13 | 第3讲:挑战猜数字和猜字母小游戏。
摘要:带大家编程实现猜数字和猜字母小游戏,通过实战熟悉Python基本知识,还有两个“蠢”bug
![第三课思维导图](https://github.com/fly51fly/Practical_Python_Programming/blob/master/images/class_3_001.jpg)| [L3](https://www.bilibili.com/video/av92186118?p=6) | | - | 第3讲答疑([问题列表](https://github.com/fly51fly/Practical_Python_Programming/blob/master/questions/question_004.md))
摘要: Jupyter Notebook里cell的运行方式、字符串里的转义用法、Tab的用法、除random还有哪些常用的库/包、如何记住Python的语句、in的用法、关于ASCII表、Notebook里IN[*]的含义、 if语句能否写成一行、Python包应该怎么学、用函数控制函数的实现、整段代码缩进的操作、文字的随机选择、如何入门网络编程、import和C语言里include的关系、Python编程的随意性会有什么隐患、hash函数可以用在哪、range函数的三参数用法、ipythhon如何进行断点调试、Python是否有类似指针的用法 | [L3.1](https://www.bilibili.com/video/av92186118?p=7)| | - | 手把手:配置Sublime Text3编程环境
摘要:面向新手的零基础Win10轻量IDE编程环境配置指南 | [L3.2](https://www.bilibili.com/video/av92186118?p=8) | | - | 聊聊hash函数与id函数
摘要:深入了解hash和id两个“小众”函数,探索Python的内存分配和垃圾回收机制、字典和集合背后的秘密、可变元素与不可变元素的概念,用代码的方式知其所以然 | [L3.3](https://www.bilibili.com/video/av92186118?p=9) | | 2020.3.20 | 第4讲:玩转简单加密
摘要:一起践行先实现、再完善的开发过程,通过简单文字加密的代码实现,看函数如何应需而生、命名空间的概念、简单的%pdb代码调试技巧、Python代码重构思路、函数说明文档书写规范,体会对“好代码”的感觉。
代码:[Jupyter Notebook](https://github.com/fly51fly/Practical_Python_Programming/blob/master/code/Python_Class_4.ipynb)
![第四课思维导图](https://github.com/fly51fly/Practical_Python_Programming/blob/master/images/class_4_001.jpg)| [L4.1](https://www.bilibili.com/video/av92186118?p=10) | | - | 第4讲答疑([问题列表](https://github.com/fly51fly/Practical_Python_Programming/blob/master/questions/question_004.md))
摘要:变量批量改名小技巧、Python负数取余的实现机制、如何实现类似switch的分支条件、global使用释疑、IPython Notebooks撤销操作小技巧、字符串如何修改、用[Python Tutor网站](http://www.pythontutor.com/visualize.html#mode=edit)可视化运行分析代码的小技巧、函数传参与global的关系、函数参数注解的作用、(True)与True、代码该简化思路、.py文件间是否可引用变量和函数、Python解释器检查函数、变量是否已定义的时机、Sublime Text如何用input、函数形参的作用、函数是否必须返回值、函数是否可以自己调用自己、Python函数能否重载| [L4.2](https://www.bilibili.com/video/av92186118?p=11) | | 2020.3.27 | 第5讲:分久必合·合久必分
摘要:现在就开始你的简单项目,在不断探索、思考、出错的过程中学习编程!复盘之前实现的加密/解密代码,反思函数和变量的命名、函数默认参数是使用场景,分析注释(包括文档字符串)面向的读者、写注释的出发点和思考角度。对加密/解密函数进行“极限”压缩,其间介绍自增等操作符、列表、列表推导、字符串的split/join操作、代码续行技巧;通过对比几种实现探讨长代码、短代码的利弊,如何打磨代码、兼顾精炼的同时提高可读性,如何用函数嵌套实现“局部重用”,探索函数结构设计之道。
代码:[Jupyter Notebook](https://github.com/fly51fly/Practical_Python_Programming/blob/master/code/Python_Class_5.ipynb)
![第五课思维导图](https://github.com/fly51fly/Practical_Python_Programming/blob/master/images/class_5_001.jpg)| [L5.1](https://www.bilibili.com/video/av92186118?p=12) | | - | 第5讲答疑([问题列表](https://github.com/fly51fly/Practical_Python_Programming/blob/master/questions/question_005.md))
摘要:lambda内联函数的使用、有问题如何搜索、嵌套列表的使用、字符串操作的常用函数、列表和数组的关系、代码重用是否关乎性能、如何区分可变类型和非可变类型、空字符串能否显示、成员函数的调用为什么要加点、《Think Python 2e》和讲授内容如何组合学习、注释的度应该怎么把握、代码精简到什么程度合适、Python里有没有多维列表、续行时断开位置有什么特殊要求、如何测量程序运行时间、为什么全局变量不推荐使用、列表和元组的区别等 | [L5.2](https://www.bilibili.com/video/av92186118?p=13) | | 2020.4.3 | 第6讲:可交付的随机加密
摘要:梳理 表-表、表+位置偏移、ASCII偏移置换 三种简单加密单字符转换的实现,思考使用随机码本的加密/解密和交付方式。本节我们会一起探索:函数化如何将全局变量局部化、Python中的常量、用random.shuffle()函数打乱排序、通过list.copy()函数实现浅拷贝避免数据被意外篡改、随机乱排的时机选择问题、用pickle实现序列化/反序列化、用open()函数已制定模式打开文件、文件的二进制读写模式('b')、用write()和read()实现文件内容的读写、用with实现区间内对文件的访问和出区间文件自动关闭、notebook里用!运行命令行指令、字典的初步知识。
代码:[Jupyter Notebook](https://github.com/fly51fly/Practical_Python_Programming/blob/master/code/Python_Class_6.ipynb)
![第六课思维导图](https://github.com/fly51fly/Practical_Python_Programming/blob/master/images/class_6_001.jpg)| [L6.1](https://www.bilibili.com/video/av92186118?p=15) | | - | 第6讲答疑([问题列表](https://github.com/fly51fly/Practical_Python_Programming/blob/master/questions/question_006.md))
摘要:赋值浅拷贝与沉拷贝、Notebook里的魔术指令、文件系统绝对路径与相对路径、容器的类型和应用场景、Python课如何复习是否应该重看视频、if \_\_name\_\_ == '\_\_main\_\_'的用法和意义、除shuffle以外的列表打乱方法、函数任意参数/不定长参数的设定、常量的使用、pickle的dump/load释疑、Python源码如何保护/防止逆向、列表与C++数组的差别、微博上竞猜题目的解析、字典如何排序、字典如何打乱顺序、with的用法、字典键值如何互换、Python是面向对象还是面向过程、字典如何通过容器实现一对多和多对一映射、Windows下more的使用等 | [L6.2](https://www.bilibili.com/video/av92186118?p=16) | | 2020.4.10 | 第7讲:类化之路
摘要:字典的特性、字典键/值的取值限制、字典常用函数、字典in的遍历、字典的两种常用遍历方法、类的抽象、类的三方面作用:封装细节、重用函数和变量间的联系、提高可读性,什么时候应该用类、类的初始化、类变量与实例变量、类方法定义里self的用法、为什么不建议用可变类型作类变量、类的实例化、莫尔斯电码问题的提出、用Excel+字符串split()函数实现数据规整。
代码:[Jupyter Notebook](https://github.com/fly51fly/Practical_Python_Programming/blob/master/code/Python_Class_7.ipynb)
![第七课思维导图](https://github.com/fly51fly/Practical_Python_Programming/blob/master/images/class_7_001.jpg)| [L7.1](https://www.bilibili.com/video/av92186118?p=17) | | - | 第7讲答疑([问题列表](https://github.com/fly51fly/Practical_Python_Programming/blob/master/questions/question_007.md))
摘要:类变量与实例变量详解、字典到底有序还是无序、数据缺失如何处理、函数内定义的变量能否在全局使用、元组与集合的区别、Python是否有模板类、可变对象为什么不能hash()、Python的多变量赋值用法、Python能否读写Excel、类方法self参数的用法、三引号的用法、C++与Python的搭配使用、is和==的区别等 | [L7.2](https://www.bilibili.com/video/av92186118?p=18) | | 2020.4.17 | 第8讲:CSV与正则表达式
摘要:Excel与Python代码通过CSV文件进行数据交换、Python读取csv文件、正则表达式基础、利用文本编辑器正则表达式搜索/替换实现数据规整、Python的re正则库、用re.findall()实现代码里的正则匹配、利用工具与纯代码实现的权衡。
代码:[Jupyter Notebook](https://github.com/fly51fly/Practical_Python_Programming/blob/master/code/Python_Class_8.ipynb)
![第八课思维导图](https://github.com/fly51fly/Practical_Python_Programming/blob/master/images/class_8_001.jpg)| [L8.1](https://www.bilibili.com/video/av92186118?p=19) | | - | 第8讲答疑([问题列表](https://github.com/fly51fly/Practical_Python_Programming/blob/master/questions/question_008.md))
摘要:CSV和正则还有什么用、正则表达式是否会出现歧义、CSV文件出现乱码怎么办、正则表达式取子串的方法、正则表达式非贪婪符号的使用、如何创建CSV文件、正则表达式是否能匹配中文、re库除了findall还有什么有用的函数、"UTF-8-sig"和"UTF-8"两种编码方式的差别 | [L8.2](https://www.bilibili.com/video/av92186118?p=20) | | 2020.4.24 | 第9讲:类的继承与递归的实现
摘要:字典get()函数的用法、字符串的upper()/lower()大小写转换函数、用''.join()实现字符串拼接、列表推导的实际应用、长距离一致缩进要多加小心、问题升级——平滑莫尔斯编码的引入、字符串replace()替换函数的使用、类的继承、类成员函数的重载、从手工解码过程中提炼思路、递归的主要思路、可用递归解决问题的特点、max()/min()函数的使用、递归函数重复处理过程和截止条件的确定。
代码:[Jupyter Notebook](https://github.com/fly51fly/Practical_Python_Programming/blob/master/code/Python_Class_9.ipynb)
![第九课思维导图](https://github.com/fly51fly/Practical_Python_Programming/blob/master/images/class_9_001.jpg)| [L9.1](https://www.bilibili.com/video/av92186118?p=21) | | - | PytonTutor的使用及本地化运行指南
摘要:PythonTutor主要功能、PythonTutor使用详解、自己搭建本地PythonTutor服务 | [L9.2](https://www.bilibili.com/video/av92186118?p=22) | | - | 明明白白学递归
摘要:什么是递归?什么问题可以用递归?如何设计并实现递归?带你学个通通透透! | [L9.3](https://www.bilibili.com/video/av92186118?p=23) | | - | 第9讲答疑([问题列表](https://github.com/fly51fly/Practical_Python_Programming/blob/master/questions/question_009.md))
摘要:递归函数入口和被递归调用函数间是否要做区分、递归的适用场景、递归能否用循环代替、递归截止条件有没有其他表示方法、notebooks里某个cell一直运行中如何处理、format字符串格式化的使用、用字典+正则实现批量替换、Python递归与C/C++递归的差别、多继承与多重继承、Python里类有没有私有成员、递归的效率问题、split()函数切割长度的控制、继承的类是否可以改变类变量、是否所有类都能继承、多继承的顺序、继承类的初始化问题、代码里太长的数据定义如何简化、tsv文件和csv文件的区别、如何用Python处理tsv文件等。 | [L9.4](https://www.bilibili.com/video/av92186118?p=24) | | 2020.5.8 | 第10讲:解码之路
摘要:候选解码结果的筛选思路——加字典/常用词词典/高频词排序词典、用循环遍历/列表推导/filter()函数结合lambda内联函数/集合运算四种方式实现数据过滤、用词典缩减/递归深度缩减实现解码优化、字符级与单词级解码、用空间换时间、递归思维、类比思维等。
代码:[Jupyter Notebook](https://github.com/fly51fly/Practical_Python_Programming/blob/master/code/Python_Class_10.ipynb)
![第十课思维导图](https://github.com/fly51fly/Practical_Python_Programming/blob/master/images/class_10_001.jpg)| [L10.1](https://www.bilibili.com/video/av92186118?p=25) | | - | 第10讲答疑([问题列表](https://github.com/fly51fly/Practical_Python_Programming/blob/master/questions/question_010.md))
摘要:递归运行过程分析方法、利用上下文信息进行候选解码结果筛选、如何用while循环代替递归、lambda内联函数还能用于哪些Python内置函数、语法信息是否可用于筛选、filter()函数的用法、用时间换空间vs.用空间换时间、是否可用不同的词频文件、迭代器的使用、iter()函数和\_\_iter\_\_()函数、是否可结合哈夫曼编码、能否用常用句子库解码、自己上手编程困难该怎么办、加快解码速度的思路、生成器的使用、迭代器转换为列表是否会丢失信息、集合的交集并集计算、程序如何实现分级封装、应该如何添加词频文件不包含的词等。 | [L10.2](https://www.bilibili.com/video/av92186118?p=26) | | 2020.5.15 | 第11讲:反向最大匹配解码与爬虫初步
摘要:基于优先匹配长词的想法,用递归实现反向最大匹配解码;初步了解爬虫的基本概念、基本流程;采、抽、存三步走的简单实现;了解requests使用、回顾正则表达式的配置和re正则库的使用。
代码:[Jupyter Notebook](https://github.com/fly51fly/Practical_Python_Programming/blob/master/code/Python_Class_11.ipynb)
![第十一课思维导图](https://github.com/fly51fly/Practical_Python_Programming/blob/master/images/class_11_001.jpg)| [L11.1](https://www.bilibili.com/video/av92186118?p=27) | | - | 网络爬虫第0课:浏览器背后干的那些事儿
摘要:了解、开发爬虫必须了解的HTTP/HTML知识,从输入网址到看见网页,浏览器背地里干的那些事儿。 | [L11.2](https://www.bilibili.com/video/av92186118?p=28) | | - | 第11讲答疑([问题列表](https://github.com/fly51fly/Practical_Python_Programming/blob/master/questions/question_011.md))
摘要:爬虫有什么“高级”应用、什么样的网站是“软柿子”、正向最大匹配能用吗、pyquery与jQuery、爬虫难吗、图片影片怎么爬、玩转正则需要记住吗、网站反爬有哪些手段、爬网页要遵守的规定、递归过程中最小值的定义、网站是不是都能爬、requests的header部分是做什么的、百度网分享链接和分析密码的爬取策略、正则表达式如何匹配“所有符号”、get和post的区别、爬虫与数据可视化、爬虫翻页链接的处理、学爬虫有什么好课程、对课上的“干货”力不从心怎么办、有没有可能不分析页面源码也能做抽取、反爬常用手段、验证码问题怎么解决等。 | [L11.3](https://www.bilibili.com/video/av92186118?p=29) | | 2020.5.22 | 第12讲:爬虫框架初步设计与B站豆瓣初步尝试
摘要:构建爬虫基础类(框架),了解框架、脚手架和库的差别,复习类的设计和构建,对B站和豆瓣的排行榜进行采集,构建完整的信息抽取用正则表达式,熟悉RegexBuilder等正则调试工具的使用,用copy as Curl->requests技巧“克隆”浏览器的访问请求。
代码:[Jupyter Notebook](https://github.com/fly51fly/Practical_Python_Programming/blob/master/code/Python_Class_12.ipynb)
![第十二课思维导图](https://github.com/fly51fly/Practical_Python_Programming/blob/master/images/class_12_001.jpg)| [L12.1](https://www.bilibili.com/video/av92186118?p=30) | | - | 第12讲答疑([问题列表](https://github.com/fly51fly/Practical_Python_Programming/blob/master/questions/question_012.md))
摘要:爬虫能采集视频吗、headers是否必须、正则能否匹配中文、根据不同情况采用不同匹配的爬虫、UTF-8和GBK的区别、课上豆瓣的网址为什么会被加长转义、windows命令行常用命令哪里找、爬虫是什么网站都能抓吗、有密码保护之类手段保护的网址如何怕取、正则里的反斜杠都要转义吗、动态排行榜怎么采集、Python框架除了构建网站还能干啥、有防爬虫无法破解的网站数据怎么获取、页面内容缺少规律性怎么配置、Terminal页面右键没有refresh选项怎么办、Python是爬虫的最佳选择吗、网页拖到下面自动加载或点击更多加载的页面怎么抓取、类似百度翻译的页面怎么找到目标url、爬虫是否有法律风险、什么样的业务适合开发框架等。 | [L12.2](https://www.bilibili.com/video/av92186118?p=31) | | - | 第13讲:豆瓣爬虫的进化与爬虫基类的完善
摘要:构建豆瓣图书网页单页的完整爬虫,重点解决信息抽取正则表达式的配置和缺失信息项的处理,完善爬虫基类中headers的设置,通过继承机制构建豆瓣图书页面爬虫类。
代码:[Jupyter Notebook](https://github.com/fly51fly/Practical_Python_Programming/blob/master/code/Python_Class_13.ipynb) | [L13.1](https://www.bilibili.com/video/av92186118?p=32) | 学习资源推荐: 1. [中文 Python 笔记](https://github.com/lijin-THU/notes-python) 2. [千行代码入门Python](https://github.com/xianhu/LearnPython) 3. [Python代码运行可视化](http://www.pythontutor.com/index.html) 4. [Comprehensive Python Cheatsheet](https://gto76.github.io/python-cheatsheet/) 5. [The Hitchhiker's Guide to Python](https://docs.python-guide.org/intro/learning/) 6. [正则表达式调试/可视化](https://regexr.com/) 7. [正则表达式图形式可视化](https://jex.im/regulex)