
Paroxython est un ensemble d'outils de ligne de commande qui tagissent et filtrent par algorithmique, vous traduisez votre collection d'exercices de programmation Python.
Vous êtes un enseignant, en charge d'un cours de programmation d'introduction dans un établissement d'enseignement. Au fil des ans, vous en avez accumulé beaucoup - trop nombreux - des programmes et des extraits de code qui peuvent intéresser vos élèves.
Ou, en tant que développeur chevronné, vous aimeriez partager vos connaissances en aidant un être cher à apprendre à coder. Une recherche superficielle de matériel pédagogique donne une quantité écrasante de sites Web et de référentiels remplis de programmes Python de différents niveaux (par exemple, 1, 2, 3, 4, 5, 6, et beaucoup plus du python impressionnant en éducation).
Dans tous les cas, les codes source Python que vous avez rassemblés sont généralement nombreux (centaines ou même milliers), de taille raisonnable (tout ce qui est inférieur à 100 lignes de code) et de nature éducative (par exemple, des extraits, des exemples, des quiz, des solutions d'exercice, des algorithmes classiques). Les concepts de programmation que vous prévoyez d'enseigner restent un niveau relativement bas (par exemple, les affectations, les boucles imbriquées, les modèles d'accumulation, les fonctions récursives de la queue, etc.).
Si tout cela semble familier, continuez à me lire.
Paroxython vise à vous aider à sélectionner, dans votre collection, le programme unique qui convient le mieux à vos besoins. Par exemple, il répondra avec plaisir aux questions suivantes:
- Comment ce concept peut-il être illustré?
- Quels problèmes utilisent les mêmes structures algorithmiques et de données que celle-ci?
- Quel devoir devrais-je donner à mes élèves afin qu'ils puissent pratiquer le contenu de la dernière leçon?
De plus, comme Paroxython sait ce que sait votre classe, il peut recommander le bon programme au bon moment:
- Qu'est-ce qui ferait un bon exercice de revue?
- Quels exercices puis-je donner à cet examen?
- Quel est le coût d'apprentissage actuel de cet exemple?
À long terme, Paroxython peut vous guider et vous faire repenser le plan de votre cours:
- Quelles sont les conditions préalables au concept de cession?
- Ai-je suffisamment de matériel pour introduire des sous-programmes avant même de parler de conditionnels et de boucles?
- Parmi les boucles, qui doivent venir en premier: le plus puissant (
while), ou le plus utile (for)?- Comment structurer logiquement ce groupe de modèles itératifs habituels?
- Quelles sont les bases , exactement?
Toutes les questions sur lesquelles l'auteur a changé d'avis depuis qu'il a commencé à travailler sur ce projet!
Dans un monde idéal, Paroxython pourrait même mettre fin aux guerres religieuses les plus meurtrières, avec des arguments rationnels et axés sur les données:
- Père, est-ce un péché de sortir tôt?
- Un véritable octet devrait-il utiliser un masque?

Paroxython part à partir d'un dossier donné de programmes . Son contenu est analysé, et toutes les fonctionnalités qui répondent aux spécifications fournies sont étiquetées et associées à leurs portées (par exemple, "assignment_lhs_identifier:a": 4, 6, 18 ou "loop_with_late_exit:while": 3-7, 20-29 ).
Ces étiquettes ne constituent que des connaissances dispersées. L'étape suivante consiste à les cartographier sur une taxonomie conçue avec des contraintes hiérarchiques de base à l'esprit (par exemple, le fait que l'introduction du concept de sortie précoce doit venir après celle de la boucle, qui nécessite elle-même celle du flux de contrôle, est exprimée par le taxon "flow/loop/exit/early" ).

Extrait de la taxonomie générée à partir des algorithmes - Python.
Cliquez pour sauter à sa version dynamique complète dans le manuel d'utilisation.
Tout est ensuite persisté dans une base de données de balises, qui peut plus tard être filtrée via un pipeline de commandes, par exemple:
Le résultat est une liste des recommandations de programme commandées en augmentant le coût d'apprentissage.
Supposons que le répertoire programs contient ces programmes simples.
Tout d'abord, créez cette base de données TAG:
> paroxython collect programs
Labelling 21 programs.
Mapping taxonomy on 21 programs.
Writing programs_db.json.Ensuite, filtrez-le à travers ce pipeline:
> 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.Et voilà, votre rapport de recommandation!
À la grande surprise de personne:
python -m pip install paroxython
La commande suivante doit imprimer un message d'aide et quitter:
paroxython --help
Si vous utilisez Jupyter Notebook / Lab, vous venez également d'installer une commande dite magique. Chargez-le comme ceci:
% load_ext paroxython Cela devrait imprimer "paroxython 0.7.0 loaded." . Exécutez-le sur une cellule de code 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| Taxon | Lignes |
|---|---|
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 |
Comme vous pouvez le voir, dans ce programme, Paroxython s'identifie entre autres:
style/procedural );def/subroutine/function/impure );while ( flow/loop/while ) avec une sortie tardive ( flow/loop/exit/late );type/sequence/list/literal/empty et call/subroutine/method/sequence/list/append );var/assignment/explicit/parallel ). Notez que nous distinguons les affectations explicites (avec = =) et implicites (paramètres et variables d'itération);var/assignment/explicit/parallel/slide ). Si la dénomination nous est unique, le modèle lui-même se produit dans un certain nombre de programmes: implémentations de séquences de finite C avec C supérieur à 1, plus grand diviseur commun, Quicksort, etc.var/scope/local );meta/count/variety/3 ), selon le nombre de lignes, de caractéristiques et de caractéristiques distinctes. La commande magique %%paroxython (correspondant à la tag de sous-commande) ne fait que gratter la surface du système. Comme indiqué précédemment, pour estimer le coût d'apprentissage des fonctionnalités et obtenir des recommandations exploitables, vous aurez d'abord besoin de construire la base de données de balises avec collect , puis d'appeler recommend sur un pipeline.
Bien qu'il s'agisse toujours d'un travail en cours, Paroxython devrait déjà être assez bien documenté:
Enfin, une batterie d'exemples et une couverture complète des tests devrait aider à répondre à toute question restante.