Code Monkey home page Code Monkey logo

practical_python_programming's Introduction

北京邮电大学“Python编程与实践”课程(2020)

  • 课程名称:Python编程与实践
  • 教师:陈光 (@爱可可-爱生活)
  • 时间:周五上午 8:00-9:35

本课程旨在通过编程学习Python,在解决问题的过程中了解Python编程的基础知识。一起编程,一起爱上Python。

推荐参考书:
《Think Python 2nd Edition》 by Allen B. Downey   中文版: 免费在线浏览

课程视频(Bilibili): 北邮陈光《Python编程与实践》(2020)

日期 内容 视频
2020.2.28 第1讲:轻松起航,一起爱Python
摘要:为什么要学编程?为什么是Python?有啥缺点吗?有什么“用武之地”?为什么是我?参考什么书?该怎么学?实践体验入门    PPT下载
第一课题图
L1
- 零基础安装配置Anaconda开发环境
摘要:Anaconda及相关概念介绍;Python 2.x和3.x的故事及如何选择;Anaconda国内镜像的使用;Anaconda基本组件的介绍和实战;Python的交互式、批量式运行方式介绍;Jupyter Notebooks使用初步;conda使用初步
L1.1
2020.3.6 第2讲:初次尝试
摘要:如何做到“聪明地努力学习”?Python最常用的知识是什么?实战入门第一站。
第二课思维导图
L2
- 第2讲答疑(问题列表
摘要: 缩进相同但不挨着的代码什么关系、代码缩进用空格还是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
- 聊聊Python的“四大皆空”
摘要:把Python语言里四个“看不见”和“没用”的东西拢成一堆儿聊一聊,希望能帮你解开一些日常的小迷惑
四大皆空脑图
L2.2
2020.3.13 第3讲:挑战猜数字和猜字母小游戏。
摘要:带大家编程实现猜数字和猜字母小游戏,通过实战熟悉Python基本知识,还有两个“蠢”bug
第三课思维导图
L3
- 第3讲答疑(问题列表
摘要: Jupyter Notebook里cell的运行方式、字符串里的转义用法、Tab的用法、除random还有哪些常用的库/包、如何记住Python的语句、in的用法、关于ASCII表、Notebook里IN[*]的含义、 if语句能否写成一行、Python包应该怎么学、用函数控制函数的实现、整段代码缩进的操作、文字的随机选择、如何入门网络编程、import和C语言里include的关系、Python编程的随意性会有什么隐患、hash函数可以用在哪、range函数的三参数用法、ipythhon如何进行断点调试、Python是否有类似指针的用法
L3.1
- 手把手:配置Sublime Text3编程环境
摘要:面向新手的零基础Win10轻量IDE编程环境配置指南
L3.2
- 聊聊hash函数与id函数
摘要:深入了解hash和id两个“小众”函数,探索Python的内存分配和垃圾回收机制、字典和集合背后的秘密、可变元素与不可变元素的概念,用代码的方式知其所以然
L3.3
2020.3.20 第4讲:玩转简单加密
摘要:一起践行先实现、再完善的开发过程,通过简单文字加密的代码实现,看函数如何应需而生、命名空间的概念、简单的%pdb代码调试技巧、Python代码重构思路、函数说明文档书写规范,体会对“好代码”的感觉。
代码:Jupyter Notebook
第四课思维导图
L4.1
- 第4讲答疑(问题列表
摘要:变量批量改名小技巧、Python负数取余的实现机制、如何实现类似switch的分支条件、global使用释疑、IPython Notebooks撤销操作小技巧、字符串如何修改、用Python Tutor网站可视化运行分析代码的小技巧、函数传参与global的关系、函数参数注解的作用、(True)与True、代码该简化思路、.py文件间是否可引用变量和函数、Python解释器检查函数、变量是否已定义的时机、Sublime Text如何用input、函数形参的作用、函数是否必须返回值、函数是否可以自己调用自己、Python函数能否重载
L4.2
2020.3.27 第5讲:分久必合·合久必分
摘要:现在就开始你的简单项目,在不断探索、思考、出错的过程中学习编程!复盘之前实现的加密/解密代码,反思函数和变量的命名、函数默认参数是使用场景,分析注释(包括文档字符串)面向的读者、写注释的出发点和思考角度。对加密/解密函数进行“极限”压缩,其间介绍自增等操作符、列表、列表推导、字符串的split/join操作、代码续行技巧;通过对比几种实现探讨长代码、短代码的利弊,如何打磨代码、兼顾精炼的同时提高可读性,如何用函数嵌套实现“局部重用”,探索函数结构设计之道。
代码:Jupyter Notebook
第五课思维导图
L5.1
- 第5讲答疑(问题列表
摘要:lambda内联函数的使用、有问题如何搜索、嵌套列表的使用、字符串操作的常用函数、列表和数组的关系、代码重用是否关乎性能、如何区分可变类型和非可变类型、空字符串能否显示、成员函数的调用为什么要加点、《Think Python 2e》和讲授内容如何组合学习、注释的度应该怎么把握、代码精简到什么程度合适、Python里有没有多维列表、续行时断开位置有什么特殊要求、如何测量程序运行时间、为什么全局变量不推荐使用、列表和元组的区别等
L5.2
2020.4.3 第6讲:可交付的随机加密
摘要:梳理 表-表、表+位置偏移、ASCII偏移置换 三种简单加密单字符转换的实现,思考使用随机码本的加密/解密和交付方式。本节我们会一起探索:函数化如何将全局变量局部化、Python中的常量、用random.shuffle()函数打乱排序、通过list.copy()函数实现浅拷贝避免数据被意外篡改、随机乱排的时机选择问题、用pickle实现序列化/反序列化、用open()函数已制定模式打开文件、文件的二进制读写模式('b')、用write()和read()实现文件内容的读写、用with实现区间内对文件的访问和出区间文件自动关闭、notebook里用!运行命令行指令、字典的初步知识。
代码:Jupyter Notebook
第六课思维导图
L6.1
- 第6讲答疑(问题列表
摘要:赋值浅拷贝与沉拷贝、Notebook里的魔术指令、文件系统绝对路径与相对路径、容器的类型和应用场景、Python课如何复习是否应该重看视频、if __name__ == '__main__'的用法和意义、除shuffle以外的列表打乱方法、函数任意参数/不定长参数的设定、常量的使用、pickle的dump/load释疑、Python源码如何保护/防止逆向、列表与C++数组的差别、微博上竞猜题目的解析、字典如何排序、字典如何打乱顺序、with的用法、字典键值如何互换、Python是面向对象还是面向过程、字典如何通过容器实现一对多和多对一映射、Windows下more的使用等
L6.2
2020.4.10 第7讲:类化之路
摘要:字典的特性、字典键/值的取值限制、字典常用函数、字典in的遍历、字典的两种常用遍历方法、类的抽象、类的三方面作用:封装细节、重用函数和变量间的联系、提高可读性,什么时候应该用类、类的初始化、类变量与实例变量、类方法定义里self的用法、为什么不建议用可变类型作类变量、类的实例化、莫尔斯电码问题的提出、用Excel+字符串split()函数实现数据规整。
代码:Jupyter Notebook
第七课思维导图
L7.1
- 第7讲答疑(问题列表
摘要:类变量与实例变量详解、字典到底有序还是无序、数据缺失如何处理、函数内定义的变量能否在全局使用、元组与集合的区别、Python是否有模板类、可变对象为什么不能hash()、Python的多变量赋值用法、Python能否读写Excel、类方法self参数的用法、三引号的用法、C++与Python的搭配使用、is和==的区别等
L7.2
2020.4.17 第8讲:CSV与正则表达式
摘要:Excel与Python代码通过CSV文件进行数据交换、Python读取csv文件、正则表达式基础、利用文本编辑器正则表达式搜索/替换实现数据规整、Python的re正则库、用re.findall()实现代码里的正则匹配、利用工具与纯代码实现的权衡。
代码:Jupyter Notebook
第八课思维导图
L8.1
- 第8讲答疑(问题列表
摘要:CSV和正则还有什么用、正则表达式是否会出现歧义、CSV文件出现乱码怎么办、正则表达式取子串的方法、正则表达式非贪婪符号的使用、如何创建CSV文件、正则表达式是否能匹配中文、re库除了findall还有什么有用的函数、"UTF-8-sig"和"UTF-8"两种编码方式的差别
L8.2
2020.4.24 第9讲:类的继承与递归的实现
摘要:字典get()函数的用法、字符串的upper()/lower()大小写转换函数、用''.join()实现字符串拼接、列表推导的实际应用、长距离一致缩进要多加小心、问题升级——平滑莫尔斯编码的引入、字符串replace()替换函数的使用、类的继承、类成员函数的重载、从手工解码过程中提炼思路、递归的主要思路、可用递归解决问题的特点、max()/min()函数的使用、递归函数重复处理过程和截止条件的确定。
代码:Jupyter Notebook
第九课思维导图
L9.1
- PytonTutor的使用及本地化运行指南
摘要:PythonTutor主要功能、PythonTutor使用详解、自己搭建本地PythonTutor服务
L9.2
- 明明白白学递归
摘要:什么是递归?什么问题可以用递归?如何设计并实现递归?带你学个通通透透!
L9.3
- 第9讲答疑(问题列表
摘要:递归函数入口和被递归调用函数间是否要做区分、递归的适用场景、递归能否用循环代替、递归截止条件有没有其他表示方法、notebooks里某个cell一直运行中如何处理、format字符串格式化的使用、用字典+正则实现批量替换、Python递归与C/C++递归的差别、多继承与多重继承、Python里类有没有私有成员、递归的效率问题、split()函数切割长度的控制、继承的类是否可以改变类变量、是否所有类都能继承、多继承的顺序、继承类的初始化问题、代码里太长的数据定义如何简化、tsv文件和csv文件的区别、如何用Python处理tsv文件等。
L9.4
2020.5.8 第10讲:解码之路
摘要:候选解码结果的筛选思路——加字典/常用词词典/高频词排序词典、用循环遍历/列表推导/filter()函数结合lambda内联函数/集合运算四种方式实现数据过滤、用词典缩减/递归深度缩减实现解码优化、字符级与单词级解码、用空间换时间、递归思维、类比思维等。
代码:Jupyter Notebook
第十课思维导图
L10.1
- 第10讲答疑(问题列表
摘要:递归运行过程分析方法、利用上下文信息进行候选解码结果筛选、如何用while循环代替递归、lambda内联函数还能用于哪些Python内置函数、语法信息是否可用于筛选、filter()函数的用法、用时间换空间vs.用空间换时间、是否可用不同的词频文件、迭代器的使用、iter()函数和__iter__()函数、是否可结合哈夫曼编码、能否用常用句子库解码、自己上手编程困难该怎么办、加快解码速度的思路、生成器的使用、迭代器转换为列表是否会丢失信息、集合的交集并集计算、程序如何实现分级封装、应该如何添加词频文件不包含的词等。
L10.2
2020.5.15 第11讲:反向最大匹配解码与爬虫初步
摘要:基于优先匹配长词的想法,用递归实现反向最大匹配解码;初步了解爬虫的基本概念、基本流程;采、抽、存三步走的简单实现;了解requests使用、回顾正则表达式的配置和re正则库的使用。
代码:Jupyter Notebook
第十一课思维导图
L11.1
- 网络爬虫第0课:浏览器背后干的那些事儿
摘要:了解、开发爬虫必须了解的HTTP/HTML知识,从输入网址到看见网页,浏览器背地里干的那些事儿。
L11.2
- 第11讲答疑(问题列表
摘要:爬虫有什么“高级”应用、什么样的网站是“软柿子”、正向最大匹配能用吗、pyquery与jQuery、爬虫难吗、图片影片怎么爬、玩转正则需要记住吗、网站反爬有哪些手段、爬网页要遵守的规定、递归过程中最小值的定义、网站是不是都能爬、requests的header部分是做什么的、百度网分享链接和分析密码的爬取策略、正则表达式如何匹配“所有符号”、get和post的区别、爬虫与数据可视化、爬虫翻页链接的处理、学爬虫有什么好课程、对课上的“干货”力不从心怎么办、有没有可能不分析页面源码也能做抽取、反爬常用手段、验证码问题怎么解决等。
L11.3
2020.5.22 第12讲:爬虫框架初步设计与B站豆瓣初步尝试
摘要:构建爬虫基础类(框架),了解框架、脚手架和库的差别,复习类的设计和构建,对B站和豆瓣的排行榜进行采集,构建完整的信息抽取用正则表达式,熟悉RegexBuilder等正则调试工具的使用,用copy as Curl->requests技巧“克隆”浏览器的访问请求。
代码:Jupyter Notebook
第十二课思维导图
L12.1
- 第12讲答疑(问题列表
摘要:爬虫能采集视频吗、headers是否必须、正则能否匹配中文、根据不同情况采用不同匹配的爬虫、UTF-8和GBK的区别、课上豆瓣的网址为什么会被加长转义、windows命令行常用命令哪里找、爬虫是什么网站都能抓吗、有密码保护之类手段保护的网址如何怕取、正则里的反斜杠都要转义吗、动态排行榜怎么采集、Python框架除了构建网站还能干啥、有防爬虫无法破解的网站数据怎么获取、页面内容缺少规律性怎么配置、Terminal页面右键没有refresh选项怎么办、Python是爬虫的最佳选择吗、网页拖到下面自动加载或点击更多加载的页面怎么抓取、类似百度翻译的页面怎么找到目标url、爬虫是否有法律风险、什么样的业务适合开发框架等。
L12.2
2020.5.29 第13讲:豆瓣爬虫的进化与爬虫基类的完善
摘要:构建豆瓣图书网页单页的完整爬虫,重点解决信息抽取正则表达式的配置和缺失信息项的处理,完善爬虫基类中headers的设置,通过继承机制构建豆瓣图书页面爬虫类。
代码:Jupyter Notebook
L13.1
- 第13讲答疑(问题列表
摘要:编程状态不好时该怎么办、课下自己调试感觉困难怎么办、如何收集股票信息并用图表分析、数据的爬取加可视化、遍历过程中为什么不建议修改遍历序列、爬虫在工作中的实例、爬虫的个性化与爬虫基类的重载、除正则表达式以外还有什么其他方式可以解析网页、有些网页加载过程中有多个doc文件该如何处理、批量爬取爬虫的架构、课上的爬虫离商业爬虫有多远、分割文本的爬取有什么高效办法、如何爬取某具体方向的内容、为什么会有乱码。
L13.2
2020.6.5 第14讲:爬虫进阶之DOM树与XPath
摘要:DOM的基本概念,DOM树的基本概念,XPath的概念和基本语法,Chrome里XPath Helper扩展的使用,特定目标XPath的获取和精简,用lxml库实现网页源码的解析和XPath目标定位,基于XPath的页面信息分层抽取。
代码:Jupyter Notebook
L14.1
- 第14讲答疑(问题列表
摘要:如何深入了解xpath、xpath能否完全代替正则表达式、大爬虫也需要对每个网页配置抽取表达式吗、访问图片时拒绝访问如何处理、xpath里的@href什么意思、xpath的绝对路径和相对路径有何区别、DOM树与C++的树一样吗、xpath与正则表达式适用场景如何效率比较及怎样选择、遇到具体变成问题怎么找解决方案、xpath helper安装不了怎么办、lxml解析为什么要解码、表格数据如何采集、DOM和xpath的关系、pycharm怎么安装lxml、爬虫在生活中的应用、豆瓣书名副标题的采集问题、包含子节点的节点如何获取全部文本、xpath能否用于普通字符串、beautifulsoup和lxml在解析方面有什么区别吗、python能提供网页服务吗、模型到底是什么、没有插件如何快速获取xpath等。
L14.2
2020.6.12 第15讲:翻页的爬取和采集目标分析方法
摘要:翻页链接的获取思路、末尾页链接的检测、程序的迭代改进、从解决问题的角度思考编程过程、培养对程序的“审美”、对特殊情况的推演思路、重用与可读性、url encode/quote的使用、对网站数据可用性和扩展渠道的考察。
代码:Jupyter Notebook
L15.1
- 第15讲答疑(问题列表
摘要:如何采集音乐网站并播放音乐、豆瓣爬虫能否为书做个类、翻页能否从最后往前翻、urllib库为什么没提供urldecode函数、采集的数据用什么形式存比较好、为什么翻页经常是start=0/20/40而不是page=1、搜索引擎也是爬虫吗、能否用正则实现翻页信息采集、采集信息不全时的解决思路、页面跳转如何采集、怎样将数据方便导入Excel、爬虫 vs. 镜像、做爬虫会违法吗、动态网页或局部刷新网页的爬取、爬虫翻页没有尾页的处理方式、这是最后一节课吗……
L15.2
2020.6.19 第16讲:多级采集与多线程
摘要:标签采集与图书列表也采集结合的嵌套二级采集,多线程编程的相关概念:进程、线程、同步/异步、阻塞式/非阻塞式、线程池等,用concurrent.futures标准库实现多线程并行采集。
代码:Jupyter Notebook
L16.1
第16讲答疑(问题列表
摘要:GIL是什么、为什么线程池适用于IO密集型场景而进程池适用于计算密集型场景、多进程有什么实际应用、爬着爬着就什么也采集不到了是被发现了吗、为什么多线程能提高运行速度、二级列表很多页的时候怎么设置采集规则、线程池用完变空后还会占内存吗、豆瓣爬虫会限制爬取信息的数量么、多线程方式采集的上限取决于什么、如何确定爬虫程序最优线程个数、多线程采集如何保留项目在原页面的顺序信息等。
L16.2
第17讲、深入探索多线程
摘要:多线程的调度顺序,原子操作的概念,f"{}"字符串简化格式化的用法,print默认参数的“秘密”,信号量的概念,用信号量保证“原子操作”,非定向爬虫的概念,搜索引擎的基本原理。
代码:Jupyter Notebook
L17.1
2020.7.10 第18讲、任务队列与多线程
摘要:队列和任务队列的概念和意义,多线程对任务队列的控制,线程池的“静态”线程用法,多线程的细化控制。
代码:Jupyter Notebook
L18.1
  1. 中文 Python 笔记
  2. 千行代码入门Python
  3. Python代码运行可视化
  4. Comprehensive Python Cheatsheet
  5. The Hitchhiker's Guide to Python
  6. 正则表达式调试/可视化
  7. 正则表达式图形式可视化

practical_python_programming's People

Contributors

fly51fly avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

practical_python_programming's Issues

老师您好 有个问题想向您请教

老师您好 在分页爬取豆瓣图书的时候,遇到一个问题
在循环完成获取到单本书的数据以后,想用list.append把书的信息存到一个列表中用于后续的保存
在存完以后,列表元素的顺序是乱的,没有找到相关说明,请老师帮忙解答一下,感激不尽~~
list.append({book_name,book_path})
在添加完以后元素顺序就乱了

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.