Skip to content

Commit 8a4605d

Browse files
committed
renamings in the expressions lang area; more consistently use explang everywhere
1 parent 5b36f2c commit 8a4605d

File tree

9 files changed

+71
-39
lines changed

9 files changed

+71
-39
lines changed

notebooks/tps/expressions-lang/.teacher/README-explang-corrige-nb.md renamed to notebooks/tps/explang/.teacher/README-explang-corrige-nb.md

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
---
22
jupytext:
3-
cell_metadata_filter: all,-hidden,-heading_collapsed,-run_control,-trusted
43
encoding: '# -*- coding: utf-8 -*-'
5-
notebook_metadata_filter: all, -jupytext.text_representation.jupytext_version, -jupytext.text_representation.format_version,
6-
-language_info.version, -language_info.codemirror_mode.version, -language_info.codemirror_mode,
7-
-language_info.file_extension, -language_info.mimetype, -toc
84
text_representation:
95
extension: .md
106
format_name: myst
@@ -24,7 +20,7 @@ nbhosting:
2420

2521
+++
2622

27-
pour faire cet exercice localement sur votre ordinateur, {download}`commencez par télécharger le zip<./ARTEFACTS-expressions-lang.zip>`
23+
pour faire cet exercice localement sur votre ordinateur, {download}`commencez par télécharger le zip<./ARTEFACTS-explang.zip>`
2824

2925
+++
3026

@@ -73,27 +69,29 @@ Dans ce monde-là, on représentera par exemple
7369
par l'arbre
7470

7571
```
76-
Multiply(Plus(Integer(30), Integer(40), Integer(50)),
77-
Minus(Integer(20), Integer(15)))
72+
Multiply(
73+
Plus(Integer(30), Integer(40), Integer(50)),
74+
Minus(Integer(20), Integer(15)))
7875
```
7976
8077
* et le fragment `(4 + 1.) / -(4. + 12)`
8178
par l'arbre
8279

8380
```
84-
Divide(Plus(Integer(4), Float(1)),
85-
Negative(Plus(Float(4.), Integer(12))))
81+
Divide(
82+
Plus(Integer(4), Float(1)),
83+
Negative(
84+
Plus(Float(4.), Integer(12))))
8685
```
8786

8887
+++
8988

9089
### v2 : variables et affectations
9190

92-
Si on souhaite sophistiquer un peu davantage, on peut introduire l'affectation comme une expression.
91+
Si on souhaite sophistiquer un peu davantage, on peut introduire l'affectation comme une expression
92+
(ce qui rappelons-le n'est pas le cas en Python, ou plutôt c'est seulement le cas avec le *walrus* operator `:=`)
9393

94-
Pour digresser légèrement, on rappelle d'ailleurs que l'affectation usuelle en Python est une instruction et pas une expression (il y a d'ailleurs un nouvel opérateur en Python-3.8, qui se note `:=` et qui s'appelle le *walrus operator*, qui comble cette lacune).
95-
96-
Nous nous écartons donc ici légèrement de la sémantique de Python, en décidant que dans notre langage une affectation est une expression, comme c'est le cas dans de nombreux langages réels (C++, Javascript,…)
94+
Nous nous écartons donc ici légèrement de la sémantique de Python, en décidant que dans notre langage une affectation est une expression, comme c'est le cas dans de nombreux langages réels (C, C++, Javascript,…)
9795

9896
Dans ce monde-ci, on ajoute 3 opérateurs : *Expressions*, *Assign* et *Variable*
9997
et munis de ce vocabulaire on peut maintenant représenter
@@ -105,8 +103,9 @@ et munis de ce vocabulaire on peut maintenant représenter
105103
```
106104
* par l'arbre
107105
```
108-
Expressions(Assign(Variable(a), Int(20)),
109-
Plus(Variable(a), Int(1)))
106+
Expressions(
107+
Assign(Variable(a), Int(20)),
108+
Plus(Variable(a), Int(1)))
110109
```
111110

112111
+++
@@ -135,17 +134,32 @@ expression.eval()
135134

136135
Parmi ce qui est attendu:
137136
* on s'efforcera de **factoriser au maximum le code**, et d'éviter dans toute la mesure du possible les répétitions fastidieuses
138-
c'est tout l'objectif de cet exercice, on veut produire un code maintenable (pas de répétition), et dans lequel on puisse facilement ajouter des *features* (nouveaux opérateurs notamment).
139-
* on vous demande à la construction des objets de vérifier qu'on **appelle** le **constructeur** avec un **nombre d'arguments correct**, et lancer une **exception `TypeError` sinon** (comme le fait Python lorsqu'on appelle une fonction avec un mauvais nombre d'arguments)
140-
(voyez tout à la fin du notebook un tableau récapitulatif des nombres d'arguments)
137+
c'est tout l'objectif de cet exercice, on veut produire un code maintenable (pas de répétition),
138+
et dans lequel on puisse facilement ajouter des *features* (nouveaux opérateurs notamment).
139+
* on vous demande à la construction des objets de vérifier qu'on **appelle** le **constructeur** avec un **nombre d'arguments correct**,
140+
et de lancer une **exception `TypeError` sinon** (comme le fait Python lorsqu'on appelle une fonction avec un mauvais nombre d'arguments)
141+
voyez tout à la fin du notebook un tableau récapitulatif des nombres d'arguments
141142

142143
+++
143144

144145
## modalités
145146

146147
+++
147148

148-
Pour vous convaincre que vous avez bien répondu à la question, nous fournissons quelques cellules de test.
149+
Pour vous convaincre que vous avez bien répondu à la question, et vous aider à debugger, nous fournissons quelques cellules de test directement dans le notebook.
150+
151+
Une fois que vous êtes satisfait de votre code, vous pouvez optionnellement:
152+
- mettre votre dans un fichier `explangv1.py`
153+
- et importer son contenu dans le notebook en faisant
154+
`from explangv1 import (Plus, Multiply, ...)
155+
- de façon à pouvoir le tester automatiquement avec `pytest` en faisant
156+
```bash
157+
pytest test_explangv1.py
158+
```
159+
160+
```{admonition} autoreload
161+
cette approche fonctionne très bien mais il est crucial d'avoir **mis en place l'*autoreload*** pour que le notebook recharge votre code lorsque vous le modifiez par l'éditeur
162+
```
149163

150164
+++
151165

@@ -181,7 +195,7 @@ class Divide:
181195
182196
# prune-cell
183197
184-
from expressionsv1 import *
198+
from explangv1 import *
185199
```
186200

187201
### quelques tests
@@ -362,7 +376,7 @@ class Expressions:
362376

363377
```{code-cell} ipython3
364378
# prune-cell
365-
from expressionsv2 import *
379+
from explangv2 import *
366380
```
367381

368382
et si tout marche bien vous pouvez exécuter la suite sans erreur:
File renamed without changes.
File renamed without changes.
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
README-explang-nb.md
2-
*.py
2+
test_*.py
5.91 KB
Binary file not shown.

notebooks/tps/expressions-lang/README-explang-nb.md renamed to notebooks/tps/explang/README-explang-nb.md

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ nbhosting:
2020

2121
+++
2222

23-
pour faire cet exercice localement sur votre ordinateur, {download}`commencez par télécharger le zip<./ARTEFACTS-expressions-lang.zip>`
23+
pour faire cet exercice localement sur votre ordinateur, {download}`commencez par télécharger le zip<./ARTEFACTS-explang.zip>`
2424

2525
+++
2626

@@ -69,27 +69,29 @@ Dans ce monde-là, on représentera par exemple
6969
par l'arbre
7070

7171
```
72-
Multiply(Plus(Integer(30), Integer(40), Integer(50)),
73-
Minus(Integer(20), Integer(15)))
72+
Multiply(
73+
Plus(Integer(30), Integer(40), Integer(50)),
74+
Minus(Integer(20), Integer(15)))
7475
```
7576
7677
* et le fragment `(4 + 1.) / -(4. + 12)`
7778
par l'arbre
7879

7980
```
80-
Divide(Plus(Integer(4), Float(1)),
81-
Negative(Plus(Float(4.), Integer(12))))
81+
Divide(
82+
Plus(Integer(4), Float(1)),
83+
Negative(
84+
Plus(Float(4.), Integer(12))))
8285
```
8386

8487
+++
8588

8689
### v2 : variables et affectations
8790

88-
Si on souhaite sophistiquer un peu davantage, on peut introduire l'affectation comme une expression.
91+
Si on souhaite sophistiquer un peu davantage, on peut introduire l'affectation comme une expression
92+
(ce qui rappelons-le n'est pas le cas en Python, ou plutôt c'est seulement le cas avec le *walrus* operator `:=`)
8993

90-
Pour digresser légèrement, on rappelle d'ailleurs que l'affectation usuelle en Python est une instruction et pas une expression (il y a d'ailleurs un nouvel opérateur en Python-3.8, qui se note `:=` et qui s'appelle le *walrus operator*, qui comble cette lacune).
91-
92-
Nous nous écartons donc ici légèrement de la sémantique de Python, en décidant que dans notre langage une affectation est une expression, comme c'est le cas dans de nombreux langages réels (C++, Javascript,…)
94+
Nous nous écartons donc ici légèrement de la sémantique de Python, en décidant que dans notre langage une affectation est une expression, comme c'est le cas dans de nombreux langages réels (C, C++, Javascript,…)
9395

9496
Dans ce monde-ci, on ajoute 3 opérateurs : *Expressions*, *Assign* et *Variable*
9597
et munis de ce vocabulaire on peut maintenant représenter
@@ -101,8 +103,9 @@ et munis de ce vocabulaire on peut maintenant représenter
101103
```
102104
* par l'arbre
103105
```
104-
Expressions(Assign(Variable(a), Int(20)),
105-
Plus(Variable(a), Int(1)))
106+
Expressions(
107+
Assign(Variable(a), Int(20)),
108+
Plus(Variable(a), Int(1)))
106109
```
107110

108111
+++
@@ -131,17 +134,32 @@ expression.eval()
131134

132135
Parmi ce qui est attendu:
133136
* on s'efforcera de **factoriser au maximum le code**, et d'éviter dans toute la mesure du possible les répétitions fastidieuses
134-
c'est tout l'objectif de cet exercice, on veut produire un code maintenable (pas de répétition), et dans lequel on puisse facilement ajouter des *features* (nouveaux opérateurs notamment).
135-
* on vous demande à la construction des objets de vérifier qu'on **appelle** le **constructeur** avec un **nombre d'arguments correct**, et lancer une **exception `TypeError` sinon** (comme le fait Python lorsqu'on appelle une fonction avec un mauvais nombre d'arguments)
136-
(voyez tout à la fin du notebook un tableau récapitulatif des nombres d'arguments)
137+
c'est tout l'objectif de cet exercice, on veut produire un code maintenable (pas de répétition),
138+
et dans lequel on puisse facilement ajouter des *features* (nouveaux opérateurs notamment).
139+
* on vous demande à la construction des objets de vérifier qu'on **appelle** le **constructeur** avec un **nombre d'arguments correct**,
140+
et de lancer une **exception `TypeError` sinon** (comme le fait Python lorsqu'on appelle une fonction avec un mauvais nombre d'arguments)
141+
voyez tout à la fin du notebook un tableau récapitulatif des nombres d'arguments
137142

138143
+++
139144

140145
## modalités
141146

142147
+++
143148

144-
Pour vous convaincre que vous avez bien répondu à la question, nous fournissons quelques cellules de test.
149+
Pour vous convaincre que vous avez bien répondu à la question, et vous aider à debugger, nous fournissons quelques cellules de test directement dans le notebook.
150+
151+
Une fois que vous êtes satisfait de votre code, vous pouvez optionnellement:
152+
- mettre votre dans un fichier `explangv1.py`
153+
- et importer son contenu dans le notebook en faisant
154+
`from explangv1 import (Plus, Multiply, ...)
155+
- de façon à pouvoir le tester automatiquement avec `pytest` en faisant
156+
```bash
157+
pytest test_explangv1.py
158+
```
159+
160+
```{admonition} autoreload
161+
cette approche fonctionne très bien mais il est crucial d'avoir **mis en place l'*autoreload*** pour que le notebook recharge votre code lorsque vous le modifiez par l'éditeur
162+
```
145163

146164
+++
147165

notebooks/tps/expressions-lang/test_expressionsv1.py renamed to notebooks/tps/explang/test_explangv1.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# are considered test cases
66

77
# the code to test
8-
from expressionsv1 import (
8+
from explangv1 import (
99
Integer, Float, Negative, Plus, Minus, Multiply, Divide)
1010

1111

notebooks/tps/expressions-lang/test_expressionsv2.py renamed to notebooks/tps/explang/test_explangv2.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# are considered test cases
66

77
# the code to test
8-
from expressionsv2 import (
8+
from explangv2 import (
99
Integer, Float, Negative, Plus, Minus, Multiply, Divide,
1010
Expressions, Assignment, Variable
1111
)
-5.72 KB
Binary file not shown.

0 commit comments

Comments
 (0)