Ăcrire des exercices Python
Nous verrons ici des exemples d'utilisation courantes de Pyodide-Mkdocs-Theme (PMT) et de puzzle.
Les anciennes structures et syntaxes
Les anciennes structures et syntaxes (par exemple plusieurs fichiers sĂ©parĂ©s Python pour le sujet, la correction, les tests, les remarques avec un fichier mon_exo_REM.md) utilisĂ©es avec l'ancien Pyodide ou PMT version antĂ©rieure Ă Pyodide MkDocs Theme v.5.0.0 sont encore opĂ©rantes. Si vous avez fait une mise Ă jour de votre site, il n'est pas nĂ©cessaire de les modifier. Elles peuvent cohabiter sur le mĂȘme site avec les syntaxes prĂ©sentĂ©es dans ce tutoriel.
Pour chaque exemple, vous pourrez copier le code correspondant, et l'adapter Ă votre guise.
Pour une documentation complÚte : Documentation détaillée de pyodide-mkdocs-theme par F. Zinelli
I. PrĂ©sentation des exercices avec IDEâïž
Vous trouverez dans les paragraphes suivants des modÚles de syntaxes à copier. Il s'agit ici de présenter différentes possibilités.
Un exemple pour tester :âïž
- Cet exemple a été paramétré pour qu'au bout de 2 essais validés infructueux la réponse s'affiche.
- DÚs que l'élÚve a réussi (vérification dans le fichier
exo.pycaché), la solution s'affiche, ainsi que des explications.
Question
La fonction somme prend en paramĂštre une liste de nombres et renvoie la somme des nombres de cette liste.
Compléter le script ci-dessous :
-
â ïž N'oubliez surtout pas de valider
aprÚs avoir exécuté 
-
Dans cet exercice, vous avez droit à deux essais validés :
Au bout de deux essais validés, la solution s'affichera.
à droite de l'IDE, vous trouverez en haut###qui permet de désactiver le code aprÚs la ligne# Tests, et en bas des icÎnes pour entrer ou sortir du mode 2 colonnes ou plein écran. N'hésitez pas tester ces possibilités.
Les syntaxesâïž
Attention
Le fichier contenant les parties Python de votre exercice doivent se trouver dans le mĂȘme dossier
que votre fichier .md courant ou dans un dossier scripts placĂ© dans le mĂȘme dossier que votre fichier .md courant.
Il faudra juste veiller Ă indiquer les bons chemins vers vos fichiers.
Les différentes syntaxes à utiliser sont présentées ci-dessous, dans les différents onglets.
Des syntaxes courantes
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Le fichier nom_de_fichier_1.py se trouvant dans le dossier scripts est chargée dans l'IDE.
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
nom_de_fichier_2 se trouvant dans le dossier scripts dans un IDE avec division verticale.
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
II. Exemple 1 - avec un IDE mais pas de remarques supplĂ©mentairesâïž
Par défaut les élÚves peuvent valider leur exercice 5 fois avant que la correction ne s'affiche.
Exercice 1
Compléter le script ci-dessous (observer les assert):
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Fichier utilisé pour cet exemple
# --- PMT:code --- #
def accueil(prenom):
...
# --- PMT:corr --- #
def accueil(prenom):
return "Bonjour " + prenom
# --- PMT:tests --- #
assert accueil("Alice") == "Bonjour Alice"
assert accueil("Bob") == "Bonjour Bob"
# --- PMT:secrets --- #
assert accueil("fegrehjtyjtqfqsgeryryrfg") == "Bonjour fegrehjtyjtqfqsgeryryrfg"
Remarque : ancienne syntaxe qui fonctionne encore
# --- PYODIDE:code --- #
def accueil(prenom):
...
# --- PYODIDE:corr --- #
def accueil(prenom):
return "Bonjour " + prenom
# --- PYODIDE:tests --- #
assert accueil("Alice") == "Bonjour Alice"
assert accueil("Bob") == "Bonjour Bob"
# --- PYODIDE:secrets --- #
assert accueil("fegrehjtyjtqfqsgeryryrfg") == "Bonjour fegrehjtyjtqfqsgeryryrfg"
III. Exemple 2 - sans fonction - avec un IDE mais pas de remarques supplĂ©mentairesâïž
Dans cet exercice, on n'utilise pas de fonction.
Exercice 2
Compléter le script ci-dessous :
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Fichier utilisé pour cet exemple
# --- PMT:code --- #
# un tableau cents en compréhension qui contient 10 entiers 100.
cents = ...
# un tableau entiers en compréhension qui contient les 10 entiers entre 1 et 10 compris.
entiers = ...
# --- PMT:corr --- #
cents = [100 for k in range(10)]
entiers = [k for k in range(1, 11)]
# --- PMT:tests --- #
assert cents == [100, 100, 100, 100, 100, 100, 100, 100, 100, 100]
assert entiers == [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# --- PMT:secrets --- #
assert cents == 10 * [100]
assert entiers == [k for k in range(1, 11)]
Remarque : ancienne syntaxe qui fonctionne encore
# --- PYODIDE:code --- #
# un tableau cents en compréhension qui contient 10 entiers 100.
cents = ...
# un tableau entiers en compréhension qui contient les 10 entiers entre 1 et 10 compris.
entiers = ...
# --- PYODIDE:corr --- #
cents = [100 for k in range(10)]
entiers = [k for k in range(1, 11)]
# --- PYODIDE:tests --- #
assert cents == [100, 100, 100, 100, 100, 100, 100, 100, 100, 100]
assert entiers == [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# --- PYODIDE:secrets --- #
assert cents == 10 * [100]
assert entiers == [k for k in range(1, 11)]
Attention Ă la section secrets
S'il y a une section # --- PMT:corr --- # le fichier python doit absolument comporter la section :
# --- PMT:secrets --- #
đą En l'absence de la section # --- PMT:secrets --- # le pipeline sera mis en Ă©chec.
IV. Exemple 3, avec un IDE et des remarques supplĂ©mentairesâïž
Dans cet exemple on a utilisé la syntaxe : MAX = 2. Les élÚves pourront valider leur exercice seulement 2 fois avant que la correction ne s'affiche.
Le code Ă copier pour cet exemple se trouve plus bas ...
đ Le code Ă copier n'a pas Ă©tĂ© oubliĂ©. Il se trouve aprĂšs le rendu de l'exemple.
Exercice 3
- La fonction
est_pairprend en paramĂštre un entier. - Elle renvoie
Trues'il est pair, etFalsedans le cas contraire.
Compléter le script ci-dessous :
N'oubliez pas de valider aprÚs avoir exécuté.
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
???+ question "Exercice 3"
* La fonction `est_pair` prend en paramÚtre un entier **différent de 0**.
* Elle renvoie `True` s'il est pair, et `False` dans le cas contraire.
Compléter le script ci-dessous :
N'oubliez pas de valider aprÚs avoir exécuté.
{{IDE('scripts/pair', MAX = 2)}}
Fichier utilisé pour cet exemple
La section # --- PMT:REM --- # est écrite en markdown, en utilisant des admonitions si l'on veut.
# --- PMT:code --- #
def est_pair(nombre):
...
# --- PMT:corr --- #
def est_pair(nombre):
return nombre % 2 == 0
# --- PMT:tests --- #
assert est_pair(2) is True
assert est_pair(2000) is True
assert est_pair(1) is False
assert est_pair(777) is False
# --- PMT:secrets --- #
assert est_pair(10**10) is True
assert est_pair(10**10 + 1) is False
assert est_pair(0) is True
# --- PMT:REM --- #
!!! info "Expression booléenne"
Remarquons que `nombre % 2 == 0` est une expression booléenne qui s'évalue à `True` ou `False`
Il est **trÚs maladroit** d'écrire
```python
def est_pair(nombre):
if nombre % 2 == 0:
return True
else:
return False
```
Remarque : ancienne syntaxe qui fonctionne encore
# --- PYODIDE:code --- #
def est_pair(nombre):
...
# --- PYODIDE:corr --- #
def est_pair(nombre):
return nombre % 2 == 0
# --- PYODIDE:tests --- #
assert est_pair(2) is True
assert est_pair(2000) is True
assert est_pair(1) is False
assert est_pair(777) is False
# --- PYODIDE:secrets --- #
assert est_pair(10**10) is True
assert est_pair(10**10 + 1) is False
assert est_pair(0) is True
# --- PYODIDE:REM --- #
!!! info "Expression booléenne"
Remarquons que `nombre % 2 == 0` est une expression booléenne qui s'évalue à `True` ou `False`
Il est **trÚs maladroit** d'écrire
```python
def est_pair(nombre):
if nombre % 2 == 0:
return True
else:
return False
```
V. Exemple 4 avec un IDE et des "interdits" Pythonâïž
SANS
Dans cet exercice, nous allons utiliser la syntaxe SANS = "max, sorted, sort" pour interdire l'utilisation de max, ainsi que de sort ou sorted.
Le code Ă copier pour cet exemple
đ Le code Ă copier n'a pas Ă©tĂ© oubliĂ©. Il se trouve aprĂšs le rendu de l'exemple
Exercice 4
Ăcrire une fonction maximum :
- prenant en paramĂštre une liste non vide de nombres :
nombres - renvoyant le plus grand élément de cette liste.
Chacun des nombres utilisés est de type int ou float.
Contrainte
On interdit ici d'utiliser max, ainsi que sort ou sorted.
Exemples
Compléter ci-dessous
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Ăcrire une fonction `maximum` :
- prenant en paramĂštre une liste **non vide** de nombres : `nombres`
- renvoyant le plus grand élément de cette liste.
Chacun des nombres utilisés est de type `int` ou `float`.
!!! danger "Contrainte"
On interdit ici d'utiliser `max`, ainsi que `sort` ou `sorted`.
???+ example "Exemples"
```pycon
>>> maximum([98, 12, 104, 23, 131, 9])
131
>>> maximum([-27, 24, -3, 15])
24
```
???+ question "Exercice 4"
Compléter ci-dessous
{{ IDE('scripts/maximum', SANS = "max, sorted, sort") }}
Fichier utilisé pour cet exemple
# --- PMT:code --- #
def maximum(nombres):
...
# --- PMT:corr --- #
def maximum(nombres):
maxi = nombres[0]
for x in nombres:
if x > maxi:
maxi = x
return maxi
# --- PMT:tests --- #
assert maximum([98, 12, 104, 23, 131, 9]) == 131
assert maximum([-27, 24, -3, 15]) == 24
# --- PMT:secrets --- #
assert maximum([1, 2, 3, 4, 5]) == 5
assert maximum([5, 4, 3, 2, 1]) == 5
assert maximum([5, 5, 5]) == 5
assert abs(maximum([5.01, 5.02, 5.0]) - 5.02) < 10**-6
assert maximum([-5, -4, -3, -8, -6]) == -3
assert maximum([1,2]) == 2
# --- PMT:REM --- #
!!! info "algorithme classique Ă connaĂźtre"
Il s'agit d'une recherche de maximum classique. La liste étant non-vide, on initialise la variable `maxi` avec la premiÚre valeur de la liste.
Remarque : ancienne syntaxe qui fonctionne encore
# --- PYODIDE:code --- #
def maximum(nombres):
...
# --- PYODIDE:corr --- #
def maximum(nombres):
maxi = nombres[0]
for x in nombres:
if x > maxi:
maxi = x
return maxi
# --- PYODIDE:tests --- #
assert maximum([98, 12, 104, 23, 131, 9]) == 131
assert maximum([-27, 24, -3, 15]) == 24
# --- PYODIDE:secrets --- #
assert maximum([1, 2, 3, 4, 5]) == 5
assert maximum([5, 4, 3, 2, 1]) == 5
assert maximum([5, 5, 5]) == 5
assert abs(maximum([5.01, 5.02, 5.0]) - 5.02) < 10**-6
assert maximum([-5, -4, -3, -8, -6]) == -3
assert maximum([1,2]) == 2
# --- PYODIDE:REM --- #
!!! info "algorithme classique Ă connaĂźtre"
Il s'agit d'une recherche de maximum classique. La liste étant non-vide, on initialise la variable `maxi` avec la premiÚre valeur de la liste.
Documentation détaillée - Option SANS
VI. Exemple 5 avec un IDE et du code cachĂ© dans le sujet en Pythonâïž
Code caché
Dans cet exemple le fichier sujet en Python contient une partie qui n'est pas visible par l'élÚve.
Ces lignes de codes sont situées dans la section # --- PMT:env --- #
Voir plus bas les fichiers utilisés dans cet exemple
???+ question "Exercice 5"
Vous ignorez le rĂŽle de la fonction `mystere`, et vous ne voyez pas son code.
Vous allez donc utiliser la fonction `help` native en Python.
Compléter ci-dessous :
{{IDE('scripts/mystere_code_cache')}}
??? success "Solution"
```python
help(mystere)
```
Exercice 5
Vous ignorez le rĂŽle de la fonction mystere, et vous ne voyez pas son code.
Vous allez donc utiliser la fonction help native en Python.
Compléter ci-dessous :
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Fichier utilisé pour cet exemple
# --- PMT:env --- #
def mystere(nbre):
"""
La fonction prend en paramĂštre un nombre entier.
Elle renvoie True si ce nombre est un multiple de 7, False sinon
>>> mystere(21)
True
>>> mystere(22)
False
"""
return nbre % 7 == 0
# --- PMT:code --- #
"""
La fonction mystere est cachée.
A vous d'en découvrir les spécifications
"""
Remarque : ancienne syntaxe qui fonctionne encore
# --- PYODIDE:env --- #
def mystere(nbre):
"""
La fonction prend en paramĂštre un nombre entier.
Elle renvoie True si ce nombre est un multiple de 7, False sinon
>>> mystere(21)
True
>>> mystere(22)
False
"""
return nbre % 7 == 0
# --- PYODIDE:code --- #
"""
La fonction mystere est cachée.
A vous d'en découvrir les spécifications
"""
Exercice sans validation ni correction
Cet exercice a été conçu sans tests et sans correction. Il a donc été ajouté une admonition ??? success "Solution" pour
que la solution soit accessible.
Documentation détaillée - Les fichiers Python
VII. Exemple 6 avec une plus grande fenĂȘtre pour l'IDEâïž
Modifier la taille de l'IDE
Parfois on voudrait que l'IDE affiche un plus grand nombre de lignes.
Il suffit d'utiliser la syntaxe (pour 55 lignes par exemple) IDE('exo', MAX_SIZE=55)
Exercice
Compléter le script ci-dessous :
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Documentation détaillée - L'option MAX_SIZE
VIII. Exemple 7 avec des questions imbriquĂ©esâïž
???+ question "Exercice Ă tiroirs"
**Question 1**
Compléter la fonction `est_pair` qui prend en paramÚtre un nombre entier `nbre`, et renvoie `True` s'il est pair, `False` sinon.
{{ IDE('scripts/parite') }}
**Question 2**
Compléter la fonction `filtre_pair` qui prend en paramÚtre un tableau de nombres entiers `entiers` et qui renvoie un nouveau tableau
ne contenant que les nombres pairs de `entiers`.
!!! danger "Contrainte"
Vous appelerez **obligatoirement** la fonction Ă©crite Ă la question 1. Elle est dans le code cachĂ© de cette question. Vous n'ĂȘtes pas obligĂ©
d'avoir réussi la question 1 pour répondre à cette question.
{{ IDE('scripts/filtre') }}
Exercice Ă tiroirs
Question 1
Compléter la fonction est_pair qui prend en paramÚtre un nombre entier nbre, et renvoie True s'il est pair, False sinon.
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Question 2
Compléter la fonction filtre_pair qui prend en paramÚtre un tableau de nombres entiers entiers et qui renvoie un nouveau tableau
ne contenant que les nombres pairs de entiers.
Contrainte
Vous appelerez obligatoirement la fonction Ă©crite Ă la question 1. Elle est dans le code cachĂ© de cette question. Vous n'ĂȘtes pas obligĂ© d'avoir rĂ©ussi la question 1 pour rĂ©pondre Ă cette question.
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Fichier utilisé pour cet exemple
# --- PMT:code --- #
def est_pair(nombre):
...
# --- PMT:corr --- #
def est_pair(nombre):
return nombre % 2 == 0
# --- PMT:tests --- #
assert est_pair(2) is True
assert est_pair(2000) is True
assert est_pair(1) is False
assert est_pair(777) is False
# --- PMT:secrets --- #
assert est_pair(10**10) is True
assert est_pair(10**10 + 1) is False
assert est_pair(0) is True
Remarque : ancienne syntaxe qui fonctionne encore
# --- PYODIDE:code --- #
def est_pair(nombre):
...
# --- PYODIDE:corr --- #
def est_pair(nombre):
return nombre % 2 == 0
# --- PYODIDE:tests --- #
assert est_pair(2) is True
assert est_pair(2000) is True
assert est_pair(1) is False
assert est_pair(777) is False
# --- PYODIDE:secrets --- #
assert est_pair(10**10) is True
assert est_pair(10**10 + 1) is False
assert est_pair(0) is True
# --- PYODIDE:env --- #
def est_pair(n):
return n % 2 == 0
# --- PYODIDE:code --- #
def filtre_pair(entiers):
...
# --- PYODIDE:corr --- #
def filtre_pair(entiers):
return [nbre for nbre in entiers if est_pair(nbre)]
# --- PYODIDE:tests --- #
assert filtre_pair([1, 2, 3, 4, 5, 6, 7]) == [2, 4, 6]
assert filtre_pair([]) == []
# --- PYODIDE:secrets --- #
assert filtre_pair([100, 201, 302, 404, 501, 601, 700]) == [100, 302, 404, 700]
IX. Exercice en deux versionsâïž
Compléter la fonction `dernier` qui prend en paramÚtre une liste de nombres `ma_liste`, et renvoie le dernier élément de cette liste.
=== "Version vide"
{{ IDE('scripts/exo_vide') }}
=== "Version à compléter"
{{ IDE('scripts/exo_trous') }}
Compléter la fonction dernier qui prend en paramÚtre une liste de nombres ma_liste, et renvoie le dernier élément de cette liste.
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
# Tests (insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Fichiers utilisés pour cet exemple
# --- PMT:code --- #
def dernier(ma_liste):
...
# --- PMT:corr --- #
def dernier(ma_liste):
return ma_liste[len(ma_liste) - 1]
# --- PMT:tests --- #
assert dernier([1]) == 1
assert dernier([3, 4, 5]) == 5
# --- PMT:secrets --- #
assert dernier([5, 4, 3]) == 3
# --- PMT:REM --- #
Autre solution :
```python
def dernier(ma_liste):
return ma_liste[- 1]
```
# --- PMT:code --- #
def dernier(ma_liste):
return ma_liste[len( ...) - ...]
# --- PMT:corr --- #
def dernier(ma_liste):
return ma_liste[len(ma_liste) - 1]
# --- PMT:tests --- #
assert dernier([1]) == 1
assert dernier([3, 4, 5]) == 5
# --- PMT:secrets --- #
assert dernier([5, 4, 3]) == 3
# --- PMT:REM --- #
Autre solution :
```python
def dernier(ma_liste):
return ma_liste[- 1]
```
Remarque : ancienne syntaxe qui fonctionne encore
# --- PYODIDE:code --- #
def dernier(ma_liste):
...
# --- PYODIDE:corr --- #
def dernier(ma_liste):
return ma_liste[len(ma_liste) - 1]
# --- PYODIDE:tests --- #
assert dernier([1]) == 1
assert dernier([3, 4, 5]) == 5
# --- PYODIDE:secrets --- #
assert dernier([5, 4, 3]) == 3
# --- PYODIDE:REM --- #
Autre solution :
```python
def dernier(ma_liste):
return ma_liste[- 1]
```
# --- PYODIDE:code --- #
def dernier(ma_liste):
return ma_liste[len( ...) - ...]
# --- PYODIDE:corr --- #
def dernier(ma_liste):
return ma_liste[len(ma_liste) - 1]
# --- PYODIDE:tests --- #
assert dernier([1]) == 1
assert dernier([3, 4, 5]) == 5
# --- PYODIDE:secrets --- #
assert dernier([5, 4, 3]) == 3
# --- PYODIDE:REM --- #
Autre solution :
```python
def dernier(ma_liste):
return ma_liste[- 1]
```
X. Exercice avec la rĂ©ponse Ă chercher ailleurs (avec un lien interne)âïž
La réponse est à chercher en suivant un lien
???+ question
Comment fait-on une admonition "note pliée" ?
??? success "Solution"
Vous pouvez trouver la réponse ici : [admonitions](../02_basique/2_page_basique.md)
On indique juste le nom du fichier s'il est dans le mĂȘme dossier.
Question
Comment fait-on une admonition "note pliée" ?
Solution
Vous pouvez trouver la réponse ici : admonitions
On indique juste le nom du fichier s'il est dans le mĂȘme dossier.
XI. Cause frĂ©quente de pannes :âïž
Sections vides
Il ne faut pas de section vide dans le fichier python d'un exercice :
Ceci mettra le pipeline en échec :
ou avec l'ancienne syntaxe :
Si on n'a pas besoin d'une section, on ne l'écrit pas :
absence de la section secrets
Si votre exercice contient une section # --- PMT:corr --- # (ou # --- PYODIDE:corr --- # ), ou un fichier de remarque comme exo_REM.md mais pas de section # --- PMT:secrets --- # (ou # --- PYODIDE:secrets --- #), cela mettra le pipeline en échec.
Modifier ces comportements?
Il est possible de changer ce type de comportement en modifiant la configuration du plugin pyodide_macros, dans le fichier mkdocs.yml.
Les options généralement en jeu sont les suivantes (passer à false celle qui vous concerne, si vous souhaitez autoriser le comportement en question) :
plugins:
- pyodide_macros
ides:
forbid_secrets_without_corr_or_REMs: true
forbid_hidden_corr_and_REMs_without_secrets: true
forbid_corr_and_REMs_with_infinite_attempts: true
Voir la documentation détaillée pour des informations sur les différentes options.
XII. Ouvrir un fichier depuis un code pythonâïž
Exemple
On dĂ©sire ouvrir le fichier fable.txt qui, sur le serveur, se trouve dans le mĂȘme dossier que le fichier md.
with open('fable.txt', 'r', encoding = 'utf-8') as fichier:
cigale_fourmi = fichier.read()
print(cigale_fourmi[0: 800])
Pour que ceci fonctionne il faudra absolument ajouter une section # --- PMT:env --- # comme décrit plus bas, afin de pouvoir d'abord "installer" le fichier dans l'environnement pyodide.
à utiliser si le fichier md est nommé index.md
à utiliser si le fichier md N'EST PAS nommé index.md
Voir : Adresses relatives et copy_from_server
XIII. InsĂ©rer dans la page une section d'un fichier python d'exerciceâïž
Contenu du fichier mystere_section.py
# --- PMT:env --- #
def mystere(nbre):
"""
La fonction prend en paramĂštre un nombre entier.
Elle renvoie True si ce nombre est un multiple de 7, False sinon
>>> mystere(21)
True
>>> mystere(22)
False
"""
return nbre % 7 == 0
# --- PMT:code --- #
"""
La fonction mystere est cachée.
A vous d'en découvrir les spécifications
"""
...
# --- PMT:corr --- #
help(mystere)
Remarque : ancienne syntaxe qui fonctionne encore
# --- PYODIDE:env --- #
def mystere(nbre):
"""
La fonction prend en paramĂštre un nombre entier.
Elle renvoie True si ce nombre est un multiple de 7, False sinon
>>> mystere(21)
True
>>> mystere(22)
False
"""
return nbre % 7 == 0
# --- PYODIDE:code --- #
"""
La fonction mystere est cachée.
A vous d'en découvrir les spécifications
"""
...
# --- PYODIDE:corr --- #
help(mystere)
On peut faire afficher dans la page en cours n'importe quelle section se trouvant dans ce fichier.
La macro section
* Voici la fonction `mystere` qui se trouve dans le code caché
{{ section('scripts/mystere_section', 'env') }}
* Voici la correction de cet exercice
{{ section('scripts/mystere_section', 'corr') }}
- Voici la fonction
mysterequi se trouve dans le code caché :
| đ Texte | |
|---|---|
- Voici la correction de cet exercice :
| đ Texte | |
|---|---|
Documentation détaillée - macro section
XIV. Site de rĂ©fĂ©renceâïž
Seules les possibilités les plus couramment utilisées ont été expliquées dans ce tutoriel. Il en existe bien d'autres :
Documentation détaillée de Pyodide-Mkdocs-Theme (PMT) par F. Zinelli
XV. Exemple de puzzleâïž
Site pour créer les puzzles : Création de puzzles
Cliquer sur le menu en haut à droite (plier/déplier) pour recopier le code à insérer.
La réponse attendue est `cinq = [5 for k in range(20)]`
???+ question
<iframe src="https://www.codepuzzle.io/p/T3WK" width="100%" height="300" frameborder="0"></iframe>
Rendu :
La réponse attendue est cinq = [5 for k in range(20)]
# Tests(insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)