
Paroxython是一组命令行工具,通过算法标记和过滤您的Python编程练习收集。
您是一名老师,负责教育机构的入门编程课程。多年来,您积累了许多(太多)的程序和代码片段,这可能是您的学生感兴趣的。
或者,作为经验丰富的开发人员,您想通过帮助亲人学习如何编码来分享您的知识。粗略的对教学材料的搜索产生了大量的网站和存储库,这些网站和存储库中塞满了各个级别的Python程序(例如,1,2,2,3,4,5,6,以及更多的教育中的Python)。
无论如何,您收集的Python源代码通常是许多(数百甚至数千个),大小合理(以下的代码低于100行),并且本质上是教育的(例如,摘要,示例,测验,测验,锻炼解决方案,经典算法)。您计划教授的编程概念保持相对较低的水平(例如,分配,嵌套循环,积累模式,尾部递归功能等)。
如果所有这些听起来都很熟悉,请继续阅读我。
Paroxython旨在帮助您从收藏中选择最适合您需求的程序。例如,它将很乐意回答以下问题:
- 如何说明这个概念?
- 哪些问题使用与该算法相同的算法和数据结构?
- 我应该给学生什么作业,以便他们可以练习上一课的内容?
此外,由于Paroxython知道您的班级知道什么,因此可以在正确的时间推荐正确的程序:
- 什么会做一个好的审查练习?
- 我可以在这项考试中进行哪些练习?
- 这个示例的当前学习成本是多少?
从长远来看,Paroxython可能会指导您,并以某种方式重新考虑课程大纲:
- 分配概念的先决条件是什么?
- 在谈论条件和循环之前,我是否有足够的材料来介绍子例程?
- 在必须先出现的循环中:最强大的(
while)还是最有用的(for)?- 如何在逻辑上构建这片常用的迭代模式?
- 到底是什么基础知识?
自作者开始从事这个项目以来,作者改变了主意!
在理想的世界中,Paroxython甚至可以通过理性,数据驱动的论点来结束最致命的宗教战争:
- 父亲,早期退出是罪吗?
- 真正的字节应该使用口罩吗?

Paroxython从给定的程序文件夹开始。它的内容是解析的,所有满足所提供规格的功能都标记并与其跨度相关联(例如, "assignment_lhs_identifier:a": 4, 6, 18或"loop_with_late_exit:while": 3-7, 20-29 )。
这些标签仅构成分散的知识。下一步是将它们映射到设计有基本层次结构约束的分类法上(例如,提早退出概念的引入必须在循环之后进行,这本身需要控制流量的循环,由"flow/loop/exit/early"表示。

从算法产生的分类学-Python提取的提取物。
单击以在用户手册中跳到其完整的动态版本。
然后,所有内容都持续存在在标签数据库中,例如,可以通过命令管道过滤,例如:
结果是通过增加学习成本来订购的计划建议列表。
假设programs目录包含这些简单的程序。
首先,构建此标签数据库:
> paroxython collect programs
Labelling 21 programs.
Mapping taxonomy on 21 programs.
Writing programs_db.json.然后,通过此管道过滤:
> paroxython recommend programs
Processing 5 commands on 21 programs.
19 programs remaining after operation 1 (impart).
18 programs remaining after operation 2 (exclude).
12 programs remaining after operation 3 (exclude).
10 programs remaining after operation 4 (include).
10 programs remaining after operation 5 (hide).
Dumped: programs_recommendations.md.etvoilà,您的推荐报告!
没有人感到惊讶:
python -m pip install paroxython
以下命令应打印帮助消息并退出:
paroxython --help
如果您使用Jupyter笔记本电脑/实验室,则您还刚刚安装了所谓的魔术命令。这样的加载:
% load_ext paroxython这应该打印"paroxython 0.7.0 loaded." 。在Python代码的单元格上运行它:
% % paroxython # Lines
def fibonacci ( n ): # 2
result = [] # 3
( a , b ) = ( 0 , 1 ) # 4
while a < n : # 5
result . append ( a ) # 6
( a , b ) = ( b , a + b ) # 7
return result # 8| 分类单元 | 线 |
|---|---|
call/subroutine/method/sequence/list/append | 6 |
condition/inequality | 5 |
def/subroutine/function/impure | 2-8 |
def/subroutine/parameter/arg | 2 |
flow/loop/exit/late | 5-7 |
flow/loop/while | 5-7 |
meta/count/program/sloc/8 | 2-8 |
meta/count/subroutine/sloc/7 | 2-8 |
meta/count/variety/3 | 2-8 |
meta/program | 2-8 |
operator/arithmetic/addition | 7 |
style/procedural | 2-8 |
type/number/integer/literal | 4 |
type/number/integer/literal/zero | 4 |
type/sequence/list | 6 |
type/sequence/list/literal/empty | 3 |
type/sequence/tuple/literal | 4、4、7、7 |
var/assignment/explicit/parallel | 4 |
var/assignment/explicit/parallel/slide | 7 |
var/assignment/explicit/single | 3 |
var/assignment/implicit/parameter | 2 |
var/scope/local | 2-8、2-8、2-8、2-8 |
如您所见,在此程序中,阵发质识别:
style/procedural );def/subroutine/function/impure );while循环( flow/loop/while ),延迟出口( flow/loop/exit/late );type/sequence/list/literal/empty , call/subroutine/method/sequence/list/append );var/assignment/explicit/parallel )。请注意,我们区分显式(使用= )和隐式(参数和迭代变量)分配;var/assignment/explicit/parallel/slide )。如果该面额是我们独特的,则该模式本身发生在许多程序中:C-Finite序列的实现,C-Finite序列大于1,最大的常见除数,QuickSort,etc。var/scope/local );meta/count/variety/3 ),具体取决于线条,特征和独特的特征。魔术命令%%paroxython (对应于子命令tag )仅刮擦系统表面。如前所述,为了估算功能的学习成本并获得可行的建议,您将首先使用collect构建标签数据库,然后在您的管道上拨打recommend 。
尽管这仍然是一个正在进行的工作,但疟原虫应该已经有充分的文献记载:
最后,一系列示例和全面的测试覆盖范围应有助于回答任何剩余的问题。