Enseigner avec Jupyter

Binder NbViewer

Enseigner avec Jupyter#

Les carnets Jupyter sont de bons outils d’enseignement.

Scénario 1#

L’alternance de cellules de code et de cellules de texte formaté pour expliquer un langage informatique.

Exemple#

Une liste Python est un conteneur d’objets Python de type différent.

[1, 2, 3]  # liste de trois entiers
[1, "bonjour", 3.2]  # liste de trois éléments de type différent
[1, 2, ["a", "b", "c"]]  # Liste contenant une liste comme élément
[1, 2, ['a', 'b', 'c']]

La méthode append() permet d’ajouter un élément à une liste.

l1 = [1, 2, 3]
l1.append(4)

Scénario 2#

Utilisation des carnets Jupyter pour organiser des exercices de programmation en classe. Les instructions sont décrites dans des cellules de texte formaté et les étudiant(e)s sont invités à suivre ces instructions pour résoudre des problèmes dans des cellules de code vides ou partiellement remplies.

Exemple#

Coder une fonction qui retourne la somme des entiers positifs pairs inférieurs ou égale à \(n\). Le paramètre d’entrée de la fonction est \(n\). Si ce paramètre n’est pas une valeur numérique positive ou nulle, la fonction renvoie \(-1\).

def volume_cylindre(rayon, hauteur):
    pass # placer le code ici à la placce de l'instruction pass

Pour tester votre code, exécuter les assertions suivantes, elles ne doivent pas lever d’exception si votre fonction répond au cahier des charges.

assert somme_paire(0) == 0
assert somme_paire(2) == 2
assert somme_paire(10) == 30
assert somme_paire(100) == 2550
assert somme_paire(12.2) == 42
assert somme_paire("8") == -1

Proposition d’une solution

def somme_paire(n):
    """Renvoie la somme des entiers positifs paires inférieur a n."""
    res = -1
    if isinstance(n, (float, int)):
        if n >= 0:
            res = sum([i for i in range(0, int(n)+1, 2)])
    return res

Scénario 3#

L’interactivité d’un carnet Jupyter permet des explorations de données en ligne.

Exemple#

La base de toutes les adresses postales de France est disponible sur l’API http https://adresse.data.gouv.fr/api-doc/adresse

Le code suivant envoie une requête et affiche les 5 premiers résultats. La requête paramétrable en adaptant le dictionnaire params.

import requests
import pandas

api_url="https://api-adresse.data.gouv.fr/search/"
params = {
    "q": "avenue",
    "limit": 100,
    "type": "street", # housenumber, street, locality, municipality
    "postcode": 91190,
}

data_json = requests.get(api_url, params=params).json()
data_frame = pandas.json_normalize(data_json["features"])

print(len(data_frame), "réponses obtenues")
34 réponses obtenues
data_frame.head(5)
type geometry.type geometry.coordinates properties.label properties.score properties.id properties.name properties.postcode properties.citycode properties.x properties.y properties.city properties.context properties.type properties.importance properties.street
0 Feature Point [2.116187, 48.704444] Avenue du Génèral Leclerc 91190 Gif-sur-Yvette 0.882027 91272_1260 Avenue du Génèral Leclerc 91190 91272 634963.33 6845286.41 Gif-sur-Yvette 91, Essonne, Île-de-France street 0.70230 Avenue du Génèral Leclerc
1 Feature Point [2.115624, 48.694571] Avenue du Panorama 91190 Gif-sur-Yvette 0.877754 91272_1930 Avenue du Panorama 91190 91272 634909.61 6844189.27 Gif-sur-Yvette 91, Essonne, Île-de-France street 0.65529 Avenue du Panorama
2 Feature Point [2.115367, 48.693057] Avenue Centrale 91190 Gif-sur-Yvette 0.876670 91272_0470 Avenue Centrale 91190 91272 634888.81 6844021.17 Gif-sur-Yvette 91, Essonne, Île-de-France street 0.64337 Avenue Centrale
3 Feature Point [2.125022, 48.710608] Avenue du Bois des Roches 91190 Gif-sur-Yvette 0.875477 91272_0380 Avenue du Bois des Roches 91190 91272 635621.04 6845964.45 Gif-sur-Yvette 91, Essonne, Île-de-France street 0.63025 Avenue du Bois des Roches
4 Feature Point [2.118026, 48.692642] Avenue des Carrières 91190 Gif-sur-Yvette 0.875477 91272_0450 Avenue des Carrières 91190 91272 635084.00 6843972.84 Gif-sur-Yvette 91, Essonne, Île-de-France street 0.63025 Avenue des Carrières