
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 );call/subroutine/method/sequence/list/append type/sequence/list/literal/empty /append );var/assignment/explicit/parallel )。請注意,我們區分顯式(使用= )和隱式(參數和迭代變量)分配;var/assignment/explicit/parallel/slide )。如果該面額是我們獨特的,則該模式本身發生在許多程序中:C-Finite序列的實現,C-Finite序列大於1,最大的常見除數,QuickSort,etc。var/scope/local local );meta/count/variety/3 ),具體取決於線條,特徵和獨特的特徵。魔術命令%%paroxython (對應於子命令tag )僅刮擦系統表面。如前所述,為了估算功能的學習成本並獲得可行的建議,您將首先使用collect構建標籤數據庫,然後在您的管道上撥打recommend 。
儘管這仍然是一個正在進行的工作,但瘧原蟲應該已經有充分的文獻記載:
最後,一系列示例和全面的測試覆蓋範圍應有助於回答任何剩餘的問題。