{
"cells": [
{
"cell_type": "markdown",
"id": "907e95937b1e8560",
"metadata": {},
"source": [
"# TP de rappels Python\n",
"\n",
"L'objectif de ce notebook est de s'assurer que les bases fondamentales de Python sont solides avant de plonger dans des concepts plus avancés.\\\n",
"Les corrections sont fournies pour vous permettre de vous auto-évaluer.\n",
"\n",
"Vous pouvez double-cliquer sur chaque cellule de correction pour la voir bien formatée.\n",
"Pour éxécuter une cellule de code, cliquez dessus et appuyez sur `Shift + Enter`. Même chose pour les cellules Markdown.\n",
"\n",
"Commencez svp par traiter **uniquement les questions marquées par une étoile** (*), c'est-à-dire les questions 1 à 11, 17, 18, 21, et 28 à 30. Cette sélection a été pensée pour vous faire passer par les concepts clés dans un ordre cohérent. Une fois que vous aurez terminé cette sélection, prévenez-moi ! Nous discuterons des concepts restants. Si vous le souhaitez, vous pourrez terminer chez vous.\n",
"\n",
"Pour les plus curieux d'entre vous qui auraient terminé la sélection, sentez-vous libres de commencer à explorer la suite en toute autonomie.\n",
"\n",
"**Bon travail !**"
]
},
{
"cell_type": "markdown",
"id": "d4d9dbc2439e9dcf",
"metadata": {},
"source": [
"## 1. Variables et types de données de base"
]
},
{
"cell_type": "markdown",
"id": "5153d650d8867472",
"metadata": {},
"source": [
"**1. Déclaration de variables (\\*)**\\\n",
"Créez une variable `prenom` contenant la chaîne \"Jean\", une variable `age` contenant le nombre `34`, et une variable `taille` contenant le nombre `1.82`."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "6e1eb71e68abef86",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici\n",
"prenom = \"Johan\"\n",
"age = 22\n",
"taille = 1.71"
]
},
{
"cell_type": "markdown",
"id": "9cd8aeb24cf5fca1",
"metadata": {},
"source": [
"prenom = \"Jean\"\n",
"age = 34\n",
"taille = 1.82Correction
\n",
"```python\n",
"prenom = \"Jean\"\n",
"age = 34\n",
"taille = 1.82\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "d4ee935caafda112",
"metadata": {},
"source": [
"**2. F-strings (*)**\\\n",
"En utilisant les variables de l'exercice précédent et une f-string, affichez la phrase : `\"Je m'appelle Jean, j'ai 34 ans et je mesure 1.82m.\"`"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "34d1df9c59123d0a",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "27f3d67b456ea4d1",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"print(f\"Je m'appelle {prenom}, j'ai {age} ans et je mesure {taille}m.\")\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "e67d7fa6d4a2b90a",
"metadata": {},
"source": [
"**3. Opérations numériques (*)**\\\n",
"Créez une variable `annee_naissance` en soustrayant `age` de l'année actuelle (`2025`)."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "de048a04701dc2af",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "f07592dc45ee4a91",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"annee_naissance = 2025 - age\n",
"print(annee_naissance)\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "5a4de99499405625",
"metadata": {},
"source": [
"**4. Vérification de type (*)**\\\n",
"Affichez le type de chacune des variables `prenom`, `age`, et `taille` en utilisant la fonction `type()`."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "f76aa44bf6c9b18e",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "cd34c7f05f7786ca",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"print(type(prenom))\n",
"print(type(age))\n",
"print(type(taille))\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "99292af5b6b0e20b",
"metadata": {},
"source": [
"**5. Manipulation de chaînes (*)**\\\n",
"Affichez la variable `prenom` en majuscules."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "f9535646f56e7218",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "f7d3baedaf74b5b2",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"print(prenom.upper())\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "3b8a3495c942b188",
"metadata": {},
"source": [
"## 2. Structures de Données"
]
},
{
"cell_type": "markdown",
"id": "8a223012f92da8e0",
"metadata": {},
"source": [
"### Listes"
]
},
{
"cell_type": "markdown",
"id": "3d843dcba3c575a",
"metadata": {},
"source": [
"**6. Création de liste (*)**\\\n",
"Créez une liste `nombres` contenant les entiers de 1 à 5."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "3097e4f6b1a5c9f6",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "9d0df3209a46f007",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"nombres = [1, 2, 3, 4, 5]\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "31d3f212aac2fa8b",
"metadata": {},
"source": [
"**7. Accès à un élément (*)**\\\n",
"Affichez le troisième élément de la liste `nombres`."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "f5c6f217d533bc44",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "c80370abfa048432",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"print(nombres[2]) # L'indexation commence à 0\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "366bc23f5c7737a9",
"metadata": {},
"source": [
"**8. Ajout d'un élément (*)**\\\n",
"Ajoutez le nombre `6` à la fin de la liste `nombres`."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "79e421f2f4f8d00d",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "f13cf1f4ccec6f78",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"nombres.append(6)\n",
"print(nombres)\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "8b9933217862e219",
"metadata": {},
"source": [
"**9. Slicing (*)**\\\n",
"Créez une nouvelle liste `sous_liste` qui contient les deuxième et troisième éléments de `nombres`."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "a1b3b8c8b54561b6",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "b5ac62bedd150b02",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"sous_liste = nombres[1:3] # de l'index 1 inclus à l'index 3 exclu\n",
"print(sous_liste)\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "e7b86108cd156227",
"metadata": {},
"source": [
"### Dictionnaires"
]
},
{
"cell_type": "markdown",
"id": "77add9680b1b3f1d",
"metadata": {},
"source": [
"**10. Création de dictionnaire (*)**\\\n",
"Créez un dictionnaire `film` avec les clés `titre`, `annee`, et `realisateur`, et des valeurs de votre choix."
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "ef61a2133ae9672a",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici\n",
"film = {\n",
" \"titre\": \"Inception\",\n",
" \"annee\": 2010,\n",
" \"realisateur\": \"Christopher Nolan\"\n",
"}"
]
},
{
"cell_type": "markdown",
"id": "36a3de55d3d66c71",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"film = {\n",
" \"titre\": \"Inception\",\n",
" \"annee\": 2010,\n",
" \"realisateur\": \"Christopher Nolan\"\n",
"}\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "ee7ab59aa1fac5eb",
"metadata": {},
"source": [
"**11. Accès à une valeur (*)**\\\n",
"Affichez la valeur associée à la clé `titre` du dictionnaire `film`."
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "45d1be1b02ef1d16",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Inception\n"
]
}
],
"source": [
"# Votre code ici\n",
"print(film[\"titre\"])"
]
},
{
"cell_type": "markdown",
"id": "c5fc5de7791da59b",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"print(film[\"titre\"])\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "c1d4411f666d9c7e",
"metadata": {},
"source": [
"**12. Ajout d'une clé-valeur**\\\n",
"Ajoutez une clé `genre` avec la valeur `\"Science-Fiction\"` au dictionnaire `film`."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "307d4eb67bf1b70d",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "2c22e9404a83b70d",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"film[\"genre\"] = \"Science-Fiction\"\n",
"print(film)\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "d619f22342bacb84",
"metadata": {},
"source": [
"**13. Itération sur un dictionnaire**\\\n",
"Affichez chaque clé et sa valeur du dictionnaire `film` sous la forme `clé -> valeur`."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e97ce72cf8d2e9a7",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "4abc2de56c235493",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"for cle, valeur in film.items():\n",
" print(f\"{cle} -> {valeur}\")\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "c73570f6ac7116b3",
"metadata": {},
"source": [
"### Tuples et Sets"
]
},
{
"cell_type": "markdown",
"id": "e61a3672f9446c49",
"metadata": {},
"source": [
"**14. Création d'un tuple**\\\n",
"Créez un tuple `coordonnees` contenant les valeurs `10`, `20`."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e16adc123daa7422",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "4188a71c4f0c7aad",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"coordonnees = (10, 20)\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "e7317223326ad212",
"metadata": {},
"source": [
"**15. Unpacking de tuple**\\\n",
"À partir du tuple `coordonnees`, créez deux variables `x` et `y` en une seule ligne."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d89e36a839a6aced",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "be2e5725434e7be1",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"x, y = coordonnees\n",
"print(f\"x = {x}, y = {y}\")\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "ab23b79d189658ad",
"metadata": {},
"source": [
"**16. Création d'un set**\\\n",
"Créez une liste `doublons = [1, 2, 2, 3, 4, 4, 4]`. À partir de cette liste, créez un set `uniques` pour n'en garder que les valeurs uniques."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "bf341c8dd14da675",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "bdf6c93b039160d9",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"doublons = [1, 2, 2, 3, 4, 4, 4]\n",
"uniques = set(doublons)\n",
"print(uniques)\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "fdd6179d433d758b",
"metadata": {},
"source": [
"## 3. Structures de Contrôle"
]
},
{
"cell_type": "markdown",
"id": "e876de914d85b124",
"metadata": {},
"source": [
"**17. Conditions `if`/`elif`/`else` (*)**\\\n",
"Écrivez une condition qui affiche \"Positif\" si une variable `nombre` est supérieure à 0, \"Négatif\" si elle est inférieure à 0, et \"Nul\" si elle est égale à 0. Testez avec `nombre = 10`."
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "ab5ea14b4838f6cb",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Positif\n"
]
}
],
"source": [
"# Votre code ici\n",
"nombre = 10\n",
"if(nombre > 0):\n",
" print(\"Positif\")\n",
"elif (nombre < 0):\n",
" print(\"Négatif\")\n",
"else:\n",
" print(\"Nul\")"
]
},
{
"cell_type": "markdown",
"id": "22b5afae1a962aa5",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"nombre = 10\n",
"if nombre > 0:\n",
" print(\"Positif\")\n",
"elif nombre < 0:\n",
" print(\"Négatif\")\n",
"else:\n",
" print(\"Nul\")\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "d332d7c10609975d",
"metadata": {},
"source": [
"**18. Boucle `for` (*)**\\\n",
"En utilisant une boucle `for`, affichez chaque nom de la liste `invites = [\"Alice\", \"Bob\", \"Charlie\"]`."
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "6c0ed18600a37792",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Alice\n",
"Bob\n",
"Charlie\n"
]
}
],
"source": [
"# Votre code ici\n",
"invites = [\"Alice\", \"Bob\", \"Charlie\"]\n",
"for i in invites:\n",
" print(i)"
]
},
{
"cell_type": "markdown",
"id": "c276ee4c2142d83",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"invites = [\"Alice\", \"Bob\", \"Charlie\"]\n",
"for nom in invites:\n",
" print(nom)\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "7c2bde682be12c84",
"metadata": {},
"source": [
"**19. Boucle `for` avec `range`**\\\n",
"Affichez les nombres de 0 à 4."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "8acafdfc269483a9",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "e2f260a07a7c2adf",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"for i in range(5):\n",
" print(i)\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "6f614e2c311edebf",
"metadata": {},
"source": [
"**20. Boucle `while`**\\\n",
"En utilisant une boucle `while`, affichez les nombres de 1 à 3."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e1fc56b3174fa09d",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "6716f9b14780e09c",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"compteur = 1\n",
"while compteur <= 3:\n",
" print(compteur)\n",
" compteur += 1\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "d2347f6b6f08fd5a",
"metadata": {},
"source": [
"## 4. Fonctions"
]
},
{
"cell_type": "markdown",
"id": "e243b647adf00b18",
"metadata": {},
"source": [
"**21. Définition de fonction simple (*)**\\\n",
"Créez une fonction `saluer` qui prend un `nom` en paramètre et retourne la chaîne `\"Bonjour, [nom] !\"`."
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "56670561d672dad6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Bonjour, Marie !\n"
]
}
],
"source": [
"# Votre code ici\n",
"def saluer(nom):\n",
" return f\"Bonjour, {nom} !\"\n",
"print(saluer(\"Marie\"))"
]
},
{
"cell_type": "markdown",
"id": "c2f358532240c5e",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"def saluer(nom):\n",
" return f\"Bonjour, {nom} !\"\n",
"\n",
"# Test\n",
"print(saluer(\"Marie\"))\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "75f702b706f3b57",
"metadata": {},
"source": [
"**22. Fonction avec type hints**\\\n",
"Réécrivez la fonction `saluer` en ajoutant des type hints pour le paramètre `nom` (`str`) et la valeur de retour (`str`)."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d80071c4bab0dd86",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "786f44f4a1e848be",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"def saluer(nom: str) -> str:\n",
" return f\"Bonjour, {nom} !\"\n",
"\n",
"# Test\n",
"print(saluer(\"Pierre\"))\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "65356aa8195750a1",
"metadata": {},
"source": [
"**23. Fonction avec argument par défaut**\\\n",
"Créez une fonction `puissance` qui prend un `nombre` et un `exposant` (avec une valeur par défaut de 2), et retourne le nombre à la puissance de l'exposant."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6d6c8950f3b48cf7",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "6cc9f0ccba9b8002",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"def puissance(nombre: int, exposant: int = 2) -> int:\n",
" return nombre ** exposant\n",
"\n",
"# Test\n",
"print(puissance(3)) # Devrait afficher 9\n",
"print(puissance(3, 3)) # Devrait afficher 27\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "169ee9b4ab2b3c3c",
"metadata": {},
"source": [
"**24. Fonction avec `*args`**\\\n",
"Créez une fonction `somme_infinie` qui accepte un nombre variable d'arguments numériques et retourne leur somme."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "5d04cf282063c1ae",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "5e2c3fc86ad3e820",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"def somme_infinie(*args):\n",
" return sum(args)\n",
"\n",
"# Test\n",
"print(somme_infinie(1, 2, 3))\n",
"print(somme_infinie(10, 20, 30, 40))\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "2d2c270000ae61cd",
"metadata": {},
"source": [
"**25. Fonction avec `**kwargs`**\\\n",
"Créez une fonction `decrire_personne` qui accepte un nombre variable d'arguments par mot-clé et les affiche."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6e2dfc397bd2376f",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "4649403878b1036f",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"def decrire_personne(**kwargs):\n",
" for cle, valeur in kwargs.items():\n",
" print(f\"{cle}: {valeur}\")\n",
"\n",
"# Test\n",
"decrire_personne(nom=\"Durand\", prenom=\"Alice\", age=30)\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "b5865d5d528964f3",
"metadata": {},
"source": [
"**26. Utilisation de `**` pour déballer un dictionnaire**\\\n",
"Créez un dictionnaire `personne_dict`. Utilisez-le pour appeler la fonction `decrire_personne` de l'exercice précédent en utilisant l'opérateur `**`."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "8a6eef20d8a692e8",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "eee9a0bfc5342604",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"personne_dict = {\"nom\": \"Martin\", \"prenom\": \"Leo\", \"ville\": \"Paris\"}\n",
"decrire_personne(**personne_dict)\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "ef7700631e74b497",
"metadata": {},
"source": [
"**27. Fonction Lambda**\\\n",
"Créez une liste de noms. Triez cette liste par la longueur des noms (du plus court au plus long) en utilisant une fonction `lambda` comme clé de tri."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "bfc020b238f984f",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "60ede13c2e42887a",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"noms = [\"Christophe\", \"Ana\", \"Jean-Pierre\", \"Leo\"]\n",
"noms_tries = sorted(noms, key=lambda nom: len(nom))\n",
"print(noms_tries)\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "359038a4bba9e5c1",
"metadata": {},
"source": [
"## 5. Programmation Orientée Objet (POO)"
]
},
{
"cell_type": "markdown",
"id": "d2c80c4e7b7d74f7",
"metadata": {},
"source": [
"**28. Création de classe (*)**\\\n",
"Créez une classe `Voiture` avec une méthode `__init__` qui initialise les attributs `marque`, `modele` et `annee`."
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "fe7e33f80354e162",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici\n",
"class Voiture:\n",
" def __init__(self, marque: str, modele: str, annee: int):\n",
" self.marque = marque\n",
" self.modele = modele\n",
" self.annee = annee"
]
},
{
"cell_type": "markdown",
"id": "ec66a43000a8d9e",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"class Voiture:\n",
" def __init__(self, marque: str, modele: str, annee: int):\n",
" self.marque = marque\n",
" self.modele = modele\n",
" self.annee = annee\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "77a699f2e3dc802e",
"metadata": {},
"source": [
"**29. Instanciation d'objet (*)**\\\n",
"Créez une instance de la classe `Voiture` nommée `ma_voiture` avec des valeurs de votre choix."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f9ff92f6ef992118",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "d4ef730bc701a605",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"ma_voiture = Voiture(marque=\"Renault\", modele=\"Clio\", annee=2022)\n",
"print(ma_voiture.modele)\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "5204e7205972aaab",
"metadata": {},
"source": [
"**30. Méthode d'instance (*)**\\\n",
"Ajoutez une méthode `description` à la classe `Voiture` qui retourne une chaîne décrivant la voiture (ex: `\"Renault Clio de 2022\"`)."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b191e316abfd7ad1",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici (redéfinissez la classe entière)\n",
"class Voiture:\n",
" def __init__(self, marque: str, modele: str, annee: int):\n",
" self.marque = marque\n",
" self.modele = modele\n",
" self.annee = annee\n",
" def description(self) -> str:\n",
" return f\"{self.marque} {self.modele} de {self.annee}\"\n",
"ma_voiture = Voiture(marque=\"Peugeot\", modele=\"208\", annee=2023)\n",
"print(ma_voiture.description())"
]
},
{
"cell_type": "markdown",
"id": "205f3587f4cc5d09",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"class Voiture:\n",
" def __init__(self, marque: str, modele: str, annee: int):\n",
" self.marque = marque\n",
" self.modele = modele\n",
" self.annee = annee\n",
" \n",
" def description(self) -> str:\n",
" return f\"{self.marque} {self.modele} de {self.annee}\"\n",
"\n",
"# Test\n",
"ma_voiture = Voiture(marque=\"Peugeot\", modele=\"208\", annee=2023)\n",
"print(ma_voiture.description())\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "bcdb702b4b0dce27",
"metadata": {},
"source": [
"**31. Héritage**\\\n",
"Créez une classe `VoitureElectrique` qui hérite de `Voiture`. Son `__init__` doit accepter les mêmes arguments que `Voiture`, plus un argument `autonomie`. Elle doit appeler l'`__init__` de la classe parente."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1c0ba385497424d3",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "4f1c4d81f7ec0954",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"class VoitureElectrique(Voiture):\n",
" def __init__(self, marque: str, modele: str, annee: int, autonomie: int):\n",
" super().__init__(marque, modele, annee)\n",
" self.autonomie = autonomie\n",
"\n",
"# Test\n",
"ma_tesla = VoitureElectrique(marque=\"Tesla\", modele=\"Model 3\", annee=2024, autonomie=500)\n",
"print(ma_tesla.description())\n",
"print(f\"Autonomie : {ma_tesla.autonomie} km\")\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "f25ca9ca002f9ea2",
"metadata": {},
"source": [
"**32. Méthode `__str__` et `__repr__`**\\\n",
"Ajoutez une méthode `__repr__` à la classe `Voiture` pour que `print(ma_voiture)` affiche une représentation claire de l'objet (par exemple, `Voiture(marque='Renault', modele='Clio', annee=2022)`)."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d30e936fdcc4b396",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici (redéfinissez la classe)"
]
},
{
"cell_type": "markdown",
"id": "81cc31aee353fc9c",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"class Voiture:\n",
" def __init__(self, marque: str, modele: str, annee: int):\n",
" self.marque = marque\n",
" self.modele = modele\n",
" self.annee = annee\n",
" \n",
" def description(self) -> str:\n",
" return f\"{self.marque} {self.modele} de {self.annee}\"\n",
" \n",
" def __repr__(self) -> str:\n",
" return f\"Voiture(marque='{self.marque}', modele='{self.modele}', annee={self.annee})\"\n",
"\n",
"# Test\n",
"ma_voiture = Voiture(marque=\"Renault\", modele=\"Clio\", annee=2022)\n",
"print(ma_voiture) # Appelle __repr__ (ou __str__ si défini)\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "295da05f332f250a",
"metadata": {},
"source": [
"## 6. Gestion des Exceptions"
]
},
{
"cell_type": "markdown",
"id": "aaf5edd08ebb6b38",
"metadata": {},
"source": [
"**33. `try...except`**\\\n",
"Écrivez un bloc de code qui tente de diviser 10 par 0. Utilisez un bloc `try...except` pour intercepter la `ZeroDivisionError` et afficher un message d'erreur personnalisé."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "75124aa54bf5862f",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "f3250f3007ac226a",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"try:\n",
" resultat = 10 / 0\n",
"except ZeroDivisionError:\n",
" print(\"Erreur : Division par zéro impossible.\")\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "5797d408c2a53470",
"metadata": {},
"source": [
"**34. Lever une exception**\\\n",
"Créez une fonction `definir_age` qui prend un `age`. Si l'âge est négatif, la fonction doit lever une `ValueError` avec un message explicite."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6b14ea235a8870cb",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "2701aa9e809a771",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"def definir_age(age: int):\n",
" if age < 0:\n",
" raise ValueError(\"L'âge ne peut pas être négatif.\")\n",
" print(f\"Âge défini à {age} ans.\")\n",
"\n",
"# Test\n",
"try:\n",
" definir_age(-5)\n",
"except ValueError as e:\n",
" print(f\"Exception capturée : {e}\")\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "48aa1ceeda5fca33",
"metadata": {},
"source": [
"## 7. Concepts Avancés (rappels)"
]
},
{
"cell_type": "markdown",
"id": "3f2901ec20e58948",
"metadata": {},
"source": [
"**35. List Comprehension**\\\n",
"À partir de la liste `nombres = [1, 2, 3, 4, 5]`, créez une nouvelle liste `carres` contenant le carré de chaque nombre, en utilisant une list comprehension."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b25dd47b4f882e01",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici\n",
"nombres = [1, 2, 3, 4, 5]"
]
},
{
"cell_type": "markdown",
"id": "35b04a1d68beaaf6",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"nombres = [1, 2, 3, 4, 5]\n",
"carres = [n**2 for n in nombres]\n",
"print(carres)\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "a9f2bb794262375a",
"metadata": {},
"source": [
"**36. List Comprehension avec condition**\\\n",
"À partir de la même liste `nombres`, créez une liste `carres_pairs` contenant les carrés uniquement des nombres pairs."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6b2e41d1d38768a8",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici\n",
"nombres = [1, 2, 3, 4, 5]"
]
},
{
"cell_type": "markdown",
"id": "2c8497c9efeeb77e",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"nombres = [1, 2, 3, 4, 5]\n",
"carres_pairs = [n**2 for n in nombres if n % 2 == 0]\n",
"print(carres_pairs)\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "4c02fcf81da59513",
"metadata": {},
"source": [
"**37. Contexte Manager `with`**\\\n",
"Écrivez \"Hello World\" dans un fichier `test.txt` en utilisant `with open(...)`."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ff4443b3e8f47493",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "5a236c43ee41fe87",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"with open(\"test.txt\", \"w\") as f:\n",
" f.write(\"Hello World\")\n",
"# Le fichier est automatiquement fermé à la sortie du bloc 'with'\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "195a57bb244efe41",
"metadata": {},
"source": [
"**38. Générateur et `yield`**\\\n",
"Créez une fonction générateur `compteur` qui prend un `maximum` et `yield` les nombres de 0 jusqu'à `maximum - 1`. Ensuite, itérez dessus pour les afficher."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6a2b490dba94afa4",
"metadata": {},
"outputs": [],
"source": [
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "f73c6c378c9e7166",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"def compteur(maximum: int):\n",
" n = 0\n",
" while n < maximum:\n",
" yield n\n",
" n += 1\n",
"\n",
"# Test\n",
"for nombre in compteur(5):\n",
" print(nombre)\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "20a0345f49e6fb56",
"metadata": {},
"source": [
"**39. Décorateurs (syntaxe uniquement)**\\\n",
"Ci-dessous se trouve un décorateur simple. Créez une fonction `dire_bonjour` et appliquez-lui le décorateur `@mon_decorateur`."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "92f09be150ad18df",
"metadata": {},
"outputs": [],
"source": [
"def mon_decorateur(func):\n",
" def wrapper():\n",
" print(\"Début de l'exécution.\")\n",
" func()\n",
" print(\"Fin de l'exécution.\")\n",
" return wrapper\n",
"\n",
"# Votre code ici"
]
},
{
"cell_type": "markdown",
"id": "620c4080ea47ba36",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"def mon_decorateur(func):\n",
" def wrapper():\n",
" print(\"Début de l'exécution.\")\n",
" func()\n",
" print(\"Fin de l'exécution.\")\n",
" return wrapper\n",
"\n",
"@mon_decorateur\n",
"def dire_bonjour():\n",
" print(\"Bonjour !\")\n",
"\n",
"# Test\n",
"dire_bonjour()\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "8ff84f5be218961d",
"metadata": {},
"source": [
"**40. `async` / `await` (syntaxe uniquement)**\\\n",
"Ceci est juste une vérification de syntaxe. Écrivez une fonction asynchrone `tache_simple` qui affiche \"Début\", attend 1 seconde de manière non-bloquante avec `asyncio.sleep(1)`, puis affiche \"Fin\".\n",
"\n",
"*Note : Pour exécuter du code asynchrone dans un notebook, on peut utiliser `await` directement dans la cellule si l'environnement le supporte, ou `asyncio.run()`.*"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "235fbc6f18132d76",
"metadata": {},
"outputs": [],
"source": [
"import asyncio\n",
"\n",
"async def tache_simple():\n",
" # ... votre code ici\n",
" pass\n",
"\n",
"# votre code ici"
]
},
{
"cell_type": "markdown",
"id": "58fa1df89d9ebc87",
"metadata": {},
"source": [
"Correction
\n",
"```python\n",
"import asyncio\n",
"\n",
"async def tache_simple():\n",
" print(\"Début\")\n",
" await asyncio.sleep(1)\n",
" print(\"Fin\")\n",
"\n",
"# Pour exécuter dans un script .py, on ferait :\n",
"# asyncio.run(tache_simple())\n",
"\n",
"# Dans un notebook, on peut souvent faire directement :\n",
"await tache_simple()\n",
"```\n",
" "
]
},
{
"cell_type": "markdown",
"id": "1a4d1becb74bff5f",
"metadata": {},
"source": [
"--- \n",
"## Fin du TP\n",
"\n",
"Félicitations !"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.5"
}
},
"nbformat": 4,
"nbformat_minor": 5
}