给中级Python开发者的13个练手项目,适合你不?

2019 年 8 月 30 日 机器之心


选自realpython

作者:Habeeb Shopeju
机器之心编译
参与:高璇
学习 Python 的基础知识是一种美妙的体验。 但对于中级 Python 开发人员来说,很多项目要么过难,要么过易。 本文将列出十三个适合中级 Python 开发人员练手的项目。


Web 项目设计


内容聚合器(Content Aggregator)


1. 技术细节


该项目设计的主要目标是聚合内容。 首先,我们需要知道内容聚合器从哪些站点获取内容。 然后,使用请求库来发送 HTTP 请求,并使用 BeautifulSoup 解析和抓取站点的必要内容。


该应用程序可以将其内容聚合作为后台进程进行实现。 celery 或 apscheduler 等库可以提供帮助。 建议尝试 apscheduler。 它非常适用于小型后台进程。


从各个站点抓取的内容需要进行保存。 因此,需要使用数据库。

2. 额外挑战


对于更严峻的挑战,可以通过以下网站进行学习并获得更多信息: https://realpython.com/python-web-scraping-practical-introduction/ 


还可以在网站上订阅内容聚合文章。 每天结束时,内容聚合器会将当天的文章发送到用户的电子邮箱。


正则表达式查询工具


1. 技术细节


这类项目的主要目的是判别用户输入的查询字符串的有效性。 可以让它给出有效和无效的判别,例如「查询字符串有效」和「查询字符串无效」,以绿色显示有效,以红色显示无效。


不必从头开始构造查询工具。 使用 Python 的标准 relibrary,就可以对输入的文本运行查询字符串。 当查询字符串不匹配时,re 库将返回 None,当匹配时,将返回匹配的字符串。


有些用户可能无法完全理解正则表达式,因此读者可以自己创建一个页面来解释正则表达式的工作原理。 写一个足够有趣的文档,让用户对学习和理解正则表达式产生兴趣。


2. 额外挑战


制作一个只返回正则表达式有效性的项目很好。 但也可以添加替换功能。 这意味着应用程序将检查正则表达式的有效性,并允许用户用其他内容替换匹配的字符串。 因此,该工具不再只是查询工具,也成为了替换工具。


网址缩短(URL Shortener)


1. 技术细节


该项目设计的主要目标是缩短 URL。 应用程序在缩短 URL 后,再访问缩短的 URL 时将用户重定向到原始 URL。


在应用程序中,用户将输入原始 URL,最后获得新的缩短 URL。 为此,可以使用 random 和 string 模块的组合来生成缩短版 URL 的字符。


由于用户将在几天、几个月甚至几年后访问缩短的 URL,因此需要将原始 URL 和缩短的 URL 保存在数据库中。 当出现请求时,应用程序会检查 URL 是否存在并重定向到原始 URL,否则会重定向到 404 页面。


2. 额外挑战


使用随机字符生成缩短 URL 比长且随机字符的 URL 更好。 通过添加功能来自定义 URL,用户就可以自定义生成的 URL。


毫无疑问,自定义 xyz.com/mysite URL 比随机生成的 xyz.com/piojwr URL 更好。


便利贴功能


1. 技术细节


该项目的主要目的是让用户记下自己的想法。 即每个用户都有自己的笔记,因此应用程序需要具有帐户创建功能。 这确保了每个用户的笔记都是私人的。


django 带有用户身份验证系统,因此它可能是一个不错的选择。 你可以使用其他框架,如 bottle 和 flask,但你必须自己实现用户身份验证系统。


由于用户可能需要在不同情境下记录不同的笔记,因此实现用户的笔记分类功能将使应用程序更实用。


例如,你可能需要记录一些算法和数据结构,因此需要将不同的笔记划分到各自类别中。


你需要存储每个用户的信息和笔记,因此数据库成为该项目的重要组成部分。 如果想使用 MySQL 数据库或用于 PostgreSQL 数据库的 psycopg2 模块,可以使用 MySQLdb 模块。 还可以使用其他模块,但这完全取决于你选择使用的数据库。


2. 额外挑战


用户忘记自己的想法是人之常情,甚至有时会忘记自己记了笔记。 你可以添加一个功能,提醒用户他们记了笔记。 此功能允许用户设置提醒时间,应用程序将通过电子邮件提醒用户。


测验


1. 技术细节


这个项目的主要目标是设置测验并让人们作答。 因此,用户应该能够设置问题,其他用户应该能够回答这些问题。 然后,应用程序将显示最终得分和正确答案。


如果希望用户能够记录他们的分数,则需要实现帐户创建功能。


创建测试的用户应该能够通过上传文本文件来创建带有问题和答案的测试。 文本文件应该能够转换成用户需要的格式,因此应用程序可以将文件转换为测验格式。


你还需要为此项目创建数据库。 数据库将存储每个用户的问题、可能的答案、正确的答案和分数。


2. 额外挑战


可以允许用户在测验中添加计时器。 这样,测验的创建者可以确定用户在测验中的每个问题上花多长时间。


同时拥有测验分享功能也很棒,这样用户可以在其他平台上与朋友分享有趣的测验。

GUI 项目设计


MP3 播放器


1. 技术细节


该项目的主要目标是允许用户播放 MP3 和数字音频文件。 为了吸引用户,应用程序必须具有简单但美观的用户界面。


可以添加一个能列出可用 MP3 文件的界面。 还可以为用户列出其他非 MP3 的数字音频文件。


用户还希望 MP3 播放器具有显示正在播放的文件信息的界面。 其中可以包括文件名、长度、播放时长以及未播放时长(以分钟和秒为单位)。


Python 具有可以播放音频文件的库,如 pygame,使用几行代码即可处理多媒体文件。 还可以查看 pymedia(https://pypi.org/project/PyMedia/)和 simpleaudio。


这些库可以处理大量的数字音频文件。 包括 MP3 文件和其他格式的音频文件。


此外,这些库还有允许用户创建播放列表的功能。 为此,需要一个数据库来存储创建的播放列表的信息。 Python 的 sqlite3 模块允许使用 SQLite 数据库。


在这种情况下,SQLite 数据库是更好的选择,因为它是基于文件的,并且比其他 SQL 数据库更容易设置。 虽然 SQLite 是基于文件的,但它能比常规文件更好地保存数据。


2. 额外挑战


如果上面的都做到了,你还可以添加一项功能,以允许 MP3 播放器重复播放当前正在播放的文件,甚至可以实现随机播放。


还可以添加增加和降低音频文件播放速度的功能。 用户会很喜欢这一功能,因为他们能够以比平时更慢或更快的速度播放音频文件。


闹铃提醒工具


1. 技术细节


该项目的主要目标是在一天中的特定时间激活音频信号。 因此,定时和音频信号播放是闹铃工具中最重要的部分。


闹铃工具应允许用户创建、编辑和删除闹铃。 它还应该有一个能列出所有未被删除的闹铃界面。 因此,它应列出活动闹铃和闲置闹铃。


由于它是一个闹铃,应用程序必须在规定的时间播放音频。 用于播放音频的库有 pygame 库等。


在代码逻辑中,应用程序必须不断检查设置的闹铃时间。 到达时间后,它会触发一个播放闹钟铃声的功能。


由于应用程序将检查设置的闹铃时间,这意味着应用程序必须将其保存在数据库中。 数据库应存储闹铃日期、时间和音频等内容。


2. 额外挑战


你也可以允许用户设置定期闹铃。 用户能够设置在每周的某些日子、特定时间响铃。 例如,可以在每个星期一下午 2:00 设置闹铃。


还可以添加暂停功能,以便用户可以暂停闹钟而不是解除闹钟。


文件管理器


1. 技术细节


文件管理器项目的主要目标是为用户提供管理文件的界面。 用户需要一个易上手又实用的文件管理器。


可以使用 PySimpleGUI 库创建具有一个功能强大的由小部件组成的用户界面,该界面也无需处理大量复杂工作。


用户应该能够完成一些简单的任务,如创建新目录或空文本文件。 还应该能够复制和移动文件或目录。


sys、os 和 shutil 库对此项目非常有用,它们可用于在用户点击时对后台文件执行操作。


网格视图和列表视图是目前比较受欢迎的视图,因此你可以在应用程序中实现这两种视图。 用户可以选择适合他们的视图选项。


2. 额外挑战


要使文件管理器更高级,可以加入搜索功能。 用户无需手动查找即可搜索文件和目录。


此外,还可以实现排序功能。 用户根据不同的顺序对文件进行排序,例如时间、字母顺序或大小。


记账功能


1. 技术细节


该项目的主要目标是跟踪用户的支出。 为了向用户提供正确信息,并帮助他们优化支出,需要进行一些统计分析。


虽然跟踪费用是关键,但良好的界面也很重要。 使用 PySimpleGUI,你可以创建一个独特的界面来改善用户体验。


诸如 pandas 和 matplotlib 之类的 PyData 库可以帮助设计记账工具。


pandas 库可用于数据分析,matplotlib 库可用于绘制图形。 图表将为用户提供其支出的直观表示,并且可视化通常更容易理解。


应用程序将从用户那里获得数据。 这里的数据是输入的支出。 因此,费用需要存储在数据库中。 SQLite 数据库是该项目的一个很好的选择,因为它可以快速设置。 可以将 sqlite3 模块用于 SQLite 数据库。


2. 额外挑战


为了让用户从这个项目中受益,他们需要在应用程序中定期输入自己的支出,但人们可能经常遗忘。 所以添加一个提醒功能很有效。 如此一来,应用程序就会在每天或每周的特定时间发送通知,提醒用户们使用记账工具。


命令行项目设计


通讯录


1. 技术细节


该项目的主要目标是保存联系方式。 设置可以让用户输入联系人详细信息的命令非常重要。 可以使用 argparse 或 clickcommand-line 框架。 它们简化了很多复杂的东西,所以你只需要关注执行命令时要运行的逻辑即可。


此外,还有一些功能需要实现,如删除联系人、更新联系人信息和列出已保存联系人。 还可以允许用户使用不同顺序列出联系人,例如字母顺序或联系人创建日期。


它是一个命令行项目,用 SQLite 数据库就可以很好地保存联系人。 SQLite 的设置非常友好。 你可以将联系人详细信息保存在文件中,但文件不会具有 SQLite 的优势,例如更好的性能和安全性。


要在此项目中使用 SQLite 数据库,Python sqlite3 模块将非常有用。


2. 额外挑战


还记得数据库是如何存储在用户的计算机上的吗? 如果用户文件丢失了会怎么样? 这意味着他们也会失去联系方式。


进一步的挑战是将数据库备份到在线存储平台。 为此,可以按特定间隔将数据库文件上传到云。
 
还可以添加允许用户自己备份数据库的命令。 这样,如果数据库文件丢失,用户仍然可以访问联系人。


应该注意,你可能需要某种形式的标识,这样通讯录就可以识别哪个数据库文件属于哪个用户。 实现用户身份验证功能是实现此功能的一种方法。


网站连接检查


1. 技术细节


该项目的主要目标是检查网站的状态。 因此需要编写用于检查网站状态的代码。


你可以选择使用 TCP 或 ICMP 进行连接。 socket 模块是用于检查的模块。 还可以阅读 Python 指南中的 socket 编程。


无论是 docopt、click 还是 argparse 框架,都可以添加命令,从而允许用户在要检查的网站列表中添加和删除某网站。


用户还应该能够启动工具、停止工具并确定间隔。


由于必须保存要检查的文件列表,因此我们可以将其保存在文件(只是网站列表)中,也可以通过 sqlite3 模块使用 SQLite 数据库。


2. 额外挑战


该应用程序也可以检查站点的连接状态,并将结果显示在命令行中。 但这要求用户继续检查命令行。


也可以增加通知功能。 通知功能可以在站点状态发生变化时,在后台通过声音提醒用户。 你需要一个数据库来存储网站的先前状态。 这是该工具可以判断状态何时发生变化的唯一方式。


批量文件重命名工具


1. 技术细节


这个项目的主要目标是重命名文件。 因此,应用程序需要找到一种操作目标文件的方法。 os、sys 和 shutil 库对这个项目很有用。


你的用户将能够使用命名约定重命名目录中的所有文件。 因此,他们应该能够自主制定命名约定。 如果你了解正则表达式的工作原理,那么 regex 模块能辅助匹配所需的命名模式。


用户可能希望传递命名约定(例如 myfiles)作为命令的一部分,并期望该工具能重命名所有文件,如 myfilesXYZ,其中 XYZ 是数字。 他们还应该能够选择要重命名的文件所在的目录。


2. 额外挑战


该项目的主要挑战是重命名目录中的所有文件。 但是用户可能只需要命名一定数量的文件。 因此你可以实现一项功能,允许用户选择要重命名的文件数,而不是所有文件。


请注意,仅重命名一定数量的文件将需要该工具根据字母顺序、文件创建时间或文件大小对文件进行排序,具体取决于用户的要求。


目录树生成器


1. 技术细节


目录树生成器的主要目标是可视化文件和目录之间的关系。 os 库在列出目录和所选目录中的文件时非常有用。


诸如 docopt 或 argparse 之类的框架能简化很多内容,使你可以专注于为应用程序的逻辑编写代码。


在应用程序的逻辑中,你可以决定如何表示文件或目录。 使用不同的颜色是一个很好的方法。 你可以使用 colored 库以不同颜色打印文件和目录。


还应该可以设定目录树生成器的深度。 例如,如果一个目录的子目录有 12 级,而你只需要用到第五级。


如果你愿意,还可以让用户自主决定目录树生成器的深度。


2. 额外挑战


由于生成的目录树结果将出现在命令行上,因此可以更进一步,让生成器创建目录树的图像,即实现文本转图像的操作。


pillow (https://pillow.readthedocs.io/en/stable/) 库对此非常有用。

原文链接: https://realpython.com/intermediate-python-project-ideas/




文为机器之心编译,转载请联系本公众号获得授权
✄------------------------------------------------
加入机器之心(全职记者 / 实习生):hr@jiqizhixin.com
投稿或寻求报道:content@jiqizhixin.com
广告 & 商务合作:bd@jiqizhixin.com
登录查看更多
0

相关内容

内容聚合是用户订阅的多个网站发布的内容,在一个用户界面呈现,属于推式技术。
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
190+阅读 · 2020年6月29日
【资源】100+本免费数据科学书
专知会员服务
105+阅读 · 2020年3月17日
【干货书】机器学习Python实战教程,366页pdf
专知会员服务
332+阅读 · 2020年3月17日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
173+阅读 · 2020年1月1日
Python数据分析案例实战
炼数成金订阅号
5+阅读 · 2019年5月9日
GitHub 热门:各大网站的 Python 爬虫登录汇总
机器学习算法与Python学习
9+阅读 · 2019年3月20日
34个最优秀好用的Python开源框架
专知
9+阅读 · 2019年3月1日
Python用法速查网站
Python程序员
17+阅读 · 2018年12月16日
Python NLP入门教程
七月在线实验室
7+阅读 · 2018年6月5日
这可能是学习Python最好的免费在线电子书
程序猿
51+阅读 · 2018年5月17日
推荐一些适合小白练手的Python项目
数据挖掘入门与实战
6+阅读 · 2018年5月17日
刚开始学编程?这几款小工具能让你事半功倍
2018 年 2 月份 GitHub 上最热门的开源项目
算法与数据结构
5+阅读 · 2018年3月10日
Python NLP 入门教程
开源中国
14+阅读 · 2017年10月1日
A Survey on Deep Learning for Named Entity Recognition
Arxiv
25+阅读 · 2020年3月13日
Arxiv
26+阅读 · 2020年2月21日
dynnode2vec: Scalable Dynamic Network Embedding
Arxiv
13+阅读 · 2018年12月6日
Arxiv
6+阅读 · 2018年3月19日
Arxiv
15+阅读 · 2018年2月4日
Arxiv
6+阅读 · 2018年1月14日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
190+阅读 · 2020年6月29日
【资源】100+本免费数据科学书
专知会员服务
105+阅读 · 2020年3月17日
【干货书】机器学习Python实战教程,366页pdf
专知会员服务
332+阅读 · 2020年3月17日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
173+阅读 · 2020年1月1日
相关资讯
Python数据分析案例实战
炼数成金订阅号
5+阅读 · 2019年5月9日
GitHub 热门:各大网站的 Python 爬虫登录汇总
机器学习算法与Python学习
9+阅读 · 2019年3月20日
34个最优秀好用的Python开源框架
专知
9+阅读 · 2019年3月1日
Python用法速查网站
Python程序员
17+阅读 · 2018年12月16日
Python NLP入门教程
七月在线实验室
7+阅读 · 2018年6月5日
这可能是学习Python最好的免费在线电子书
程序猿
51+阅读 · 2018年5月17日
推荐一些适合小白练手的Python项目
数据挖掘入门与实战
6+阅读 · 2018年5月17日
刚开始学编程?这几款小工具能让你事半功倍
2018 年 2 月份 GitHub 上最热门的开源项目
算法与数据结构
5+阅读 · 2018年3月10日
Python NLP 入门教程
开源中国
14+阅读 · 2017年10月1日
相关论文
A Survey on Deep Learning for Named Entity Recognition
Arxiv
25+阅读 · 2020年3月13日
Arxiv
26+阅读 · 2020年2月21日
dynnode2vec: Scalable Dynamic Network Embedding
Arxiv
13+阅读 · 2018年12月6日
Arxiv
6+阅读 · 2018年3月19日
Arxiv
15+阅读 · 2018年2月4日
Arxiv
6+阅读 · 2018年1月14日
Top
微信扫码咨询专知VIP会员