{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "df374141",
   "metadata": {},
   "source": [
    "# Première séance — Découvrir Python pour la physique-chimie\n",
    "\n",
    "**Durée : 2 h.** Objectif de la séance : à la fin, tu sauras utiliser un notebook, faire des calculs avec des variables, afficher proprement un résultat, répéter un calcul avec une boucle, écrire une fonction et tracer ton premier graphique.\n",
    "\n",
    "| Partie | Contenu | Durée indicative |\n",
    "|---|---|---|\n",
    "| 0 | Prendre en main le notebook | 10 min |\n",
    "| 1 | Python comme calculatrice, variables, erreurs | 20 min |\n",
    "| 2 | Afficher un résultat | 15 min |\n",
    "| 3 | Listes et boucles | 25 min |\n",
    "| 4 | Fonctions | 20 min |\n",
    "| 5 | Premier graphique | 20 min |\n",
    "| 6 | Mini-projet de synthèse | 10 min |\n",
    "\n",
    "Les exercices marqués **Bonus** sont pour ceux qui vont plus vite : on peut les sauter sans problème."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5bae2907",
   "metadata": {},
   "source": [
    "Dans les applications guidées, remplace chaque `____` par le code manquant."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b8570035",
   "metadata": {},
   "source": [
    "---\n",
    "## Partie 0 — Prendre en main le notebook  *(10 min)*\n",
    "\n",
    "Un notebook est une suite de **cellules** :\n",
    "- les cellules de **texte** (comme celle-ci), écrites en *Markdown* ; on peut y mettre des formules : $E = mc^2$ ;\n",
    "- les cellules de **code**, qui contiennent du Python et que l'on **exécute**.\n",
    "\n",
    "**Les gestes à connaître**\n",
    "\n",
    "| Action | Comment |\n",
    "|---|---|\n",
    "| Exécuter une cellule et passer à la suivante | `Maj` + `Entrée` |\n",
    "| Exécuter sans changer de cellule | `Ctrl` + `Entrée` |\n",
    "| Modifier une cellule de texte | double-clic dessus |\n",
    "| Ajouter une cellule | bouton `+` de la barre d'outils (raccourcie b) |\n",
    "| Tout recommencer proprement | menu *Kernel* (ou *Noyau*) → *Restart & Run All* |\n",
    "\n",
    "Le nombre entre crochets à gauche d'une cellule de code, par exemple `[3]`, indique l'**ordre** dans lequel les cellules ont été exécutées. L'ordre compte : une cellule ne connaît que ce qui a été exécuté **avant elle**.\n",
    "\n",
    "### À toi — exécute la cellule suivante avec `Maj` + `Entrée`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "94f46591",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Bonjour, je fais du Python en TSI1 !\n"
     ]
    }
   ],
   "source": [
    "print(\"Bonjour, je fais du Python en TSI1 !\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b786b0d2",
   "metadata": {},
   "source": [
    "Dans une cellule de code, tout ce qui suit le symbole `#` est un **commentaire** : Python l'ignore. On s'en sert pour expliquer son code."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "6d4a4320",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Seule cette ligne produit un affichage.\n"
     ]
    }
   ],
   "source": [
    "# Ceci est un commentaire : il ne s'affiche pas.\n",
    "print(\"Seule cette ligne produit un affichage.\")   # un commentaire peut aussi être en fin de ligne"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "10c883ee",
   "metadata": {},
   "source": [
    "### Exercice 0.1\n",
    "Ajoute une cellule de code **sous celle-ci** (bouton `+`) et fais afficher ton prénom. Ajoute ensuite une cellule de **texte** (change son type dans la barre d'outils : *Code* → *Markdown*) contenant la formule $F = m\\,a$ écrite entre deux symboles `$` (Pense à exécuter la cellule pour voir le rendu final)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6275db9e",
   "metadata": {},
   "source": [
    "---\n",
    "## Partie 1 — Python comme calculatrice, variables, erreurs  *(20 min)*\n",
    "\n",
    "### 1.1 Opérations\n",
    "| Opération | Écriture Python | Exemple | Résultat |\n",
    "|---|---|---|---|\n",
    "| addition, soustraction | `+`, `-` | `7 - 2` | `5` |\n",
    "| multiplication | `*` | `3 * 4` | `12` |\n",
    "| division | `/` | `7 / 2` | `3.5` |\n",
    "| puissance | `**` (**jamais** `^`) | `2 ** 10` | `1024` |\n",
    "| notation scientifique | `e` | `6.02e23` | $6{,}02\\times10^{23}$ |\n",
    "\n",
    "⚠️ Le séparateur décimal est le **point** : on écrit `9.81` et non `9,81`.\n",
    "\n",
    "Dans une cellule, seul le résultat de la **dernière ligne** s'affiche automatiquement."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b4aaee1f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1024"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "2 ** 10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6446e86d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.978e-19"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "6.63e-34 * 3.00e8 / 500e-9     # énergie d'un photon de 500 nm, en joules"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0503bc38",
   "metadata": {},
   "source": [
    "### Prédis puis exécute\n",
    "Avant d'exécuter la cellule suivante, écris sur ton brouillon ce que tu penses obtenir. Puis vérifie."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2205912c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "7"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "1 + 2 * 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "56f173b8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(1 + 2) * 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "592d94e2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "25.0"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "10 / 2 * 5         # 1 ou 25 ? Les opérations de même priorité s'effectuent de gauche à droite"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0174fded-960f-4b2e-8ff9-943a25bf2e4d",
   "metadata": {},
   "source": [
    "### Exercice 1.1\n",
    "Dans la cellule ci-dessous, calcul le nombre de seconde dans une année."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "adfe1548-e687-4bf4-a2b4-955c233a9714",
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name '____' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mNameError\u001b[39m                                 Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[4]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m \u001b[43m____\u001b[49m\n",
      "\u001b[31mNameError\u001b[39m: name '____' is not defined"
     ]
    }
   ],
   "source": [
    "# À toi de jouer"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c935b073",
   "metadata": {},
   "source": [
    "**À retenir** : en cas de doute, **mets des parenthèses**. Pour calculer $\\dfrac{10}{2 \\times 5}$ il faut écrire `10 / (2 * 5)`.\n",
    "\n",
    "### 1.2 Variables\n",
    "Une **variable** est un nom auquel on associe une valeur avec le signe `=`. Ce signe n'est pas une égalité mathématique : il signifie « **range** la valeur de droite dans la boîte de gauche »."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "737a911c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.943"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = 0.250          # masse (kg)\n",
    "g = 9.81           # champ de pesanteur (m/s^2)\n",
    "h = 1.20           # hauteur (m)\n",
    "\n",
    "Ep = m * g * h     # énergie potentielle de pesanteur (J)\n",
    "Ep"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aa15901a",
   "metadata": {},
   "source": [
    "Choisis des noms **explicites** et indique les **unités** en commentaire : un physicien relit toujours ses unités.\n",
    "\n",
    "### Prédis puis exécute"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fcb48908",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "12"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n = 5\n",
    "n = n + 1          # que vaut n maintenant ?\n",
    "n = 2 * n\n",
    "n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4b19edc8",
   "metadata": {},
   "source": [
    "### 1.3 Lire un message d'erreur\n",
    "Se tromper est normal. L'important est de **lire le message d'erreur** : la **dernière ligne** donne le type d'erreur, et une flèche indique la ligne fautive.\n",
    "\n",
    "| Erreur | Signification courante |\n",
    "|---|---|\n",
    "| `SyntaxError` | faute de « grammaire » : parenthèse oubliée, virgule décimale… |\n",
    "| `NameError` | variable inconnue : faute de frappe, ou cellule de définition pas encore exécutée |\n",
    "| `TypeError` | opération impossible entre ces types (par exemple texte + nombre) |\n",
    "| `ZeroDivisionError` | division par zéro |\n",
    "| `IndentationError` | décalage en début de ligne incorrect (voir partie 3) |\n",
    "\n",
    "### Exercice 1.2 — le chasseur d'erreurs\n",
    "Chacune des quatre cellules suivantes contient **une** erreur. Exécute-la, lis le message, puis corrige-la."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bd1d04c0",
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "'(' was never closed (2365293962.py, line 2)",
     "output_type": "error",
     "traceback": [
      "  \u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[14]\u001b[39m\u001b[32m, line 2\u001b[39m\n\u001b[31m    \u001b[39m\u001b[31mv = 10 / (42 / 60\u001b[39m\n             ^\n\u001b[31mSyntaxError\u001b[39m\u001b[31m:\u001b[39m '(' was never closed\n"
     ]
    }
   ],
   "source": [
    "# Cellule A : vitesse moyenne (km/h) d'un coureur qui parcourt 10 km en 42 min\n",
    "v = 10 / (42 / 60\n",
    "v"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e92eef0f",
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'frequense' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mNameError\u001b[39m                                 Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[15]\u001b[39m\u001b[32m, line 3\u001b[39m\n\u001b[32m      1\u001b[39m \u001b[38;5;66;03m# Cellule B : période d'un signal de fréquence 440 Hz\u001b[39;00m\n\u001b[32m      2\u001b[39m frequence = \u001b[32m440\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m3\u001b[39m T = \u001b[32m1\u001b[39m / \u001b[43mfrequense\u001b[49m\n\u001b[32m      4\u001b[39m T\n",
      "\u001b[31mNameError\u001b[39m: name 'frequense' is not defined"
     ]
    }
   ],
   "source": [
    "# Cellule B : période d'un signal de fréquence 440 Hz\n",
    "frequence = 440\n",
    "T = 1 / frequense\n",
    "T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "378240f9",
   "metadata": {},
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "unsupported operand type(s) for ^: 'float' and 'int'",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mTypeError\u001b[39m                                 Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[16]\u001b[39m\u001b[32m, line 4\u001b[39m\n\u001b[32m      2\u001b[39m m = \u001b[32m2\u001b[39m\n\u001b[32m      3\u001b[39m v = \u001b[32m3\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m4\u001b[39m Ec = \u001b[32;43m1\u001b[39;49m\u001b[43m/\u001b[49m\u001b[32;43m2\u001b[39;49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m \u001b[49m\u001b[43mm\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m \u001b[49m\u001b[43mv\u001b[49m\u001b[43m^\u001b[49m\u001b[32;43m2\u001b[39;49m\n\u001b[32m      5\u001b[39m Ec\n",
      "\u001b[31mTypeError\u001b[39m: unsupported operand type(s) for ^: 'float' and 'int'"
     ]
    }
   ],
   "source": [
    "# Cellule C : énergie cinétique d'une masse de 2 kg à 3 m/s\n",
    "m = 2\n",
    "v = 3\n",
    "Ec = 1/2 * m * v^2\n",
    "Ec"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "10f62da8",
   "metadata": {},
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "unsupported operand type(s) for /: 'tuple' and 'float'",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mTypeError\u001b[39m                                 Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[17]\u001b[39m\u001b[32m, line 4\u001b[39m\n\u001b[32m      2\u001b[39m masse = \u001b[32m2\u001b[39m,\u001b[32m70e3\u001b[39m\n\u001b[32m      3\u001b[39m volume = \u001b[32m1.00\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m4\u001b[39m rho = \u001b[43mmasse\u001b[49m\u001b[43m \u001b[49m\u001b[43m/\u001b[49m\u001b[43m \u001b[49m\u001b[43mvolume\u001b[49m\n\u001b[32m      5\u001b[39m rho\n",
      "\u001b[31mTypeError\u001b[39m: unsupported operand type(s) for /: 'tuple' and 'float'"
     ]
    }
   ],
   "source": [
    "# Cellule D : masse volumique de l'aluminium (kg/m^3)\n",
    "masse = 2,70e3\n",
    "volume = 1.00\n",
    "rho = masse / volume\n",
    "rho"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3fd26db7",
   "metadata": {},
   "source": [
    "### Exercice 1.3\n",
    "Un condensateur de capacité $C = 220$ nF est chargé sous une tension $U = 12$ V.\n",
    "Calculer la charge $q = CU$ et l'énergie stockée $W = \\tfrac{1}{2}CU^2$, en définissant des variables `C` et `U` (attention : $1$ nF $= 10^{-9}$ F) à écrire avec la notation scientifique \"e\"."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b6cfb87d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# À toi de jouer"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9b413373",
   "metadata": {},
   "source": [
    "---\n",
    "## Partie 2 — Afficher un résultat  *(15 min)*\n",
    "\n",
    "La fonction `print` affiche ce qu'on lui donne. Pour mélanger texte et valeurs, on utilise une **f-string** (recommandation en python moderne, vers une bascule future vers les t-srting) : un texte précédé de `f`, dans lequel les variables sont placées entre accolades `{ }`.\n",
    "\n",
    "### Exemple : "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "a25f38ce",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Énergie potentielle : 2.943 J\n",
      "Énergie potentielle : 2.943 J\n"
     ]
    }
   ],
   "source": [
    "m = 0.250\n",
    "g = 9.81\n",
    "h = 1.20\n",
    "Ep = m * g * h\n",
    "print(\"Énergie potentielle :\", Ep, \"J\")      # méthode simple, \"ancienne\"\n",
    "print(f\"Énergie potentielle : {Ep} J\")       # f-string"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6e7ea90d",
   "metadata": {},
   "source": [
    "Pourquoi recommande-t-on les f-string ? Pour le formatage.\n",
    "\n",
    "Le résultat `2.943` a trop de chiffres par rapport aux données (3 chiffres significatifs). On précise le **format** après deux points :\n",
    "\n",
    "| Format | Effet | `Ep = 2.943` s'affiche |\n",
    "|---|---|---|\n",
    "| `{Ep:.2f}` | 2 chiffres après la virgule | `2.94` |\n",
    "| `{Ep:.3g}` | 3 chiffres significatifs | `2.94` |\n",
    "| `{Ep:.2e}` | écriture scientifique, 2 décimales | `2.94e+00` |"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9d8c0cbc",
   "metadata": {},
   "outputs": [],
   "source": [
    "print(f\"Ep = {Ep:.3g} J\")\n",
    "print(f\"Ep = {Ep:.2e} J\")\n",
    "N_A = 6.02214076e23\n",
    "print(f\"Nombre d'Avogadro : {N_A:.3e} mol^-1\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "18a54d60",
   "metadata": {},
   "source": [
    "### Exercice 2.1\n",
    "La lumière met environ 8 min 20 s pour venir du Soleil. Avec $c = 3{,}00\\times10^8$ m/s, calculer la distance Terre-Soleil et l'afficher sous la forme `Distance Terre-Soleil : {valeur} m`. La valeur devra contenir le bon nombre de chiffres significatifs.\n",
    "\n",
    "### Exercice 2.2\n",
    "Reprendre l'exercice 1.2 et afficher, en une seule instruction `print`, une phrase du type :\n",
    "`q = 2.64 µC et W = 15.8 µJ` (il faut convertir en micro-unités avant l'affichage)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "fb119a85",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Exercice 2.1\n",
    "c = 3e8      # vitesse de la lumière (m/s)\n",
    "t = 8*60+20  # durée du trajet Terre-Soleil (s\n",
    "\n",
    "# À toi de jouer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "a0d0bd7a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Exercice 2.2\n",
    "C, U = 220e-9, 12\n",
    "q = C * U\n",
    "W = 0.5 * C * U**2\n",
    "\n",
    "# À toi de jouer"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7116423e",
   "metadata": {},
   "source": [
    "---\n",
    "## Partie 3 — Listes et boucles  *(25 min)*\n",
    "\n",
    "### 3.1 Listes\n",
    "Une **liste** regroupe plusieurs valeurs entre crochets. Les éléments sont indexées **à partir de 0**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fcd94c26",
   "metadata": {},
   "outputs": [],
   "source": [
    "tensions = [1.02, 2.01, 2.98, 4.05, 5.00]     # (V)\n",
    "\n",
    "print(tensions[0])        # premier élément\n",
    "print(tensions[2])        # troisième élément !\n",
    "print(tensions[-1])       # dernier élément\n",
    "print(len(tensions))      # nombre d'éléments"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ef3c0bbf",
   "metadata": {},
   "outputs": [],
   "source": [
    "tensions.append(6.03)     # ajouter un élément à la fin\n",
    "tensions"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d86792a7",
   "metadata": {},
   "source": [
    "### Prédis puis exécute"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "679b8069",
   "metadata": {},
   "outputs": [],
   "source": [
    "L = [10, 20, 30, 40]\n",
    "L[1] + L[-1]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "05d50732-e53d-45e7-9459-db0b16a274a8",
   "metadata": {},
   "source": [
    "### Exercice 3.1\n",
    "Crée un liste contenant les notes de physique de cet élève \n",
    "\n",
    "| # | 1 | 2 | 3 |\n",
    "| --- | --- | --- | --- |\n",
    "| Notes | 12 | 17 | 6 |\n",
    "\n",
    "Calcul sa moyenne (somme de notes divisée par le nombre de notes)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8666978d-088f-4bbb-9a7a-a1e1ce252b9a",
   "metadata": {},
   "outputs": [],
   "source": [
    "N = [____]\n",
    "\n",
    "moyenne = ____ / ____\n",
    "print(f\"Moyenne du trimestre {moyenne} / 20\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "853c3d90",
   "metadata": {},
   "source": [
    "### 3.2 La boucle `for`\n",
    "Une boucle **répète** des instructions. `for x in L:` donne successivement à `x` chacune des valeurs de `L`.\n",
    "\n",
    "⚠️ Les instructions répétées sont **décalées vers la droite** (indentation de 4 espaces, obtenue avec la touche `Tab`). C'est ce décalage qui indique à Python ce qui fait partie de la boucle. Ne pas oublier les **deux points** à la fin de la ligne `for`. Ne pas oublier de sortir de l'indentation pour terminer la boucle."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "8b698bef",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "U = 1.02 V  ->  I = 10.2 mA\n",
      "U = 2.01 V  ->  I = 20.1 mA\n",
      "U = 2.98 V  ->  I = 29.8 mA\n",
      "U = 4.05 V  ->  I = 40.5 mA\n",
      "U = 5.00 V  ->  I = 50.0 mA\n",
      "Fin de la boucle\n"
     ]
    }
   ],
   "source": [
    "tensions = [1.02, 2.01, 2.98, 4.05, 5.00]     # (V)\n",
    "R = 100                                       # (ohm)\n",
    "\n",
    "for U in tensions:\n",
    "    I = U / R\n",
    "    print(f\"U = {U:.2f} V  ->  I = {I*1e3:.1f} mA\")\n",
    "\n",
    "print(\"Fin de la boucle\")       # pas décalé : exécuté une seule fois, après la boucle"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "760a25e1",
   "metadata": {},
   "source": [
    "La fonction `range(n)` fournit les entiers $0, 1, \\dots, n-1$ (donc $n$ valeurs !): c'est pratique pour répéter $n$ fois, ou pour parcourir les **indices** d'une liste."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "72323478",
   "metadata": {},
   "outputs": [],
   "source": [
    "for i in range(4):\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "450b56f8",
   "metadata": {},
   "source": [
    "### 3.3 Construire une liste avec une boucle\n",
    "On part d'une liste vide `[]` et on la remplit avec `append`. On peut aussi **accumuler** une somme dans une variable."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "bff9c15f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.0102, 0.020099999999999996, 0.0298, 0.0405, 0.05]\n",
      "tension moyenne : 3.01 V\n"
     ]
    }
   ],
   "source": [
    "tensions = [1.02, 2.01, 2.98, 4.05, 5.00]     # (V)\n",
    "R = 100\n",
    "\n",
    "intensites = []              # liste vide\n",
    "somme = 0                    # accumulateur\n",
    "for U in tensions:\n",
    "    intensites.append(U / R)\n",
    "    somme = somme + U\n",
    "\n",
    "print(intensites)\n",
    "print(f\"tension moyenne : {somme / len(tensions):.2f} V\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6b3c065f",
   "metadata": {},
   "source": [
    "### Application guidée\n",
    "Des élèves ont mesuré la période d'oscillation d'un pendule 6 fois. Compléter pour calculer la moyenne **avec une boucle**, puis afficher la plus grande et la plus petite valeur avec les fonctions `max` et `min`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a54a4a1f",
   "metadata": {},
   "outputs": [],
   "source": [
    "periodes = [1.79, 1.81, 1.80, 1.78, 1.82, 1.80]    # (s)\n",
    "\n",
    "somme = ____\n",
    "for T in ____:\n",
    "    somme = ____\n",
    "moyenne = ____\n",
    "\n",
    "print(f\"moyenne : {moyenne:.3f} s ; min : {____} s ; max : {____} s\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f1f9b22",
   "metadata": {},
   "source": [
    "### Exercice 3.1\n",
    "Les longueurs d'onde (en nm) de quatre raies visibles de l'hydrogène sont `[656.3, 486.1, 434.0, 410.2]`.\n",
    "Construire la liste des fréquences correspondantes $\\nu = c/\\lambda$, puis afficher pour chaque raie une ligne du type\n",
    "`656.3 nm  ->  4.57e+14 Hz`.\n",
    "\n",
    "### Exercice 3.2 <u>Bonus</u>\n",
    "Une balle rebondit : à chaque rebond, elle remonte à 70 % de sa hauteur précédente. Elle est lâchée de 2,0 m.\n",
    "Avec une boucle `for`, afficher la hauteur atteinte après chacun des 10 premiers rebonds.\n",
    "Puis, avec une boucle `while` (qui se répète **tant qu'**une condition est vraie : `while h > 0.01:`), déterminer le nombre de rebonds au bout duquel la hauteur devient inférieure à 1 cm."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5f0d31b2",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Exercice 3.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1d6be750",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Exercice 3.2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "796ba7dd",
   "metadata": {},
   "source": [
    "---\n",
    "## Partie 4 — Fonctions  *(20 min)*\n",
    "\n",
    "### 4.1 Utiliser des fonctions existantes\n",
    "Les fonctions mathématiques (racine, sinus, exponentielle…) ne sont pas disponibles immédiatement : elles se trouvent dans des **bibliothèques** qu'il faut **importer**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1eba5e40",
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "\n",
    "print(math.sqrt(2))          # racine carrée\n",
    "print(math.pi)               # la constante pi\n",
    "print(math.cos(math.pi))     # les angles sont en RADIANS\n",
    "print(math.exp(1))           # exponentielle\n",
    "print(math.log(math.e))      # logarithme népérien (ln)\n",
    "print(math.log10(1000))      # logarithme décimal"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "025ca471",
   "metadata": {},
   "source": [
    "### 4.2 Écrire ses propres fonctions\n",
    "Une fonction regroupe un calcul que l'on veut **réutiliser**. On la définit avec `def`, elle reçoit des **arguments** entre parenthèses et **renvoie** un résultat avec `return`. Comme pour les boucles : deux points et indentation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "29b36dd4",
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "\n",
    "def periode_pendule(l):\n",
    "    # renvoie la période (s) d'un pendule simple de longueur l (m), petites oscillations\n",
    "    g = 9.81\n",
    "    return 2 * math.pi * math.sqrt(l / g)\n",
    "\n",
    "print(periode_pendule(1.0))\n",
    "print(periode_pendule(0.25))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "00c7be04",
   "metadata": {},
   "source": [
    "⚠️ **Définir** une fonction n'affiche rien : il faut ensuite l'**appeler** avec des valeurs. Et `return` n'est pas `print` : `return` rend la valeur au programme, qui peut la réutiliser dans un calcul."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c6b65cbf",
   "metadata": {},
   "outputs": [],
   "source": [
    "T1 = periode_pendule(1.0)\n",
    "T2 = periode_pendule(4.0)\n",
    "print(f\"quadrupler la longueur multiplie la période par {T2 / T1:.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a0a707e1",
   "metadata": {},
   "source": [
    "### Application guidée\n",
    "Écrire une fonction `energie_cinetique(m, v)` puis l'utiliser pour une voiture de 1,2 t roulant à 50 km/h, puis à 130 km/h (attention aux unités !)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "63323e10",
   "metadata": {},
   "outputs": [],
   "source": [
    "def energie_cinetique(m, v):\n",
    "    return ____\n",
    "\n",
    "def kmh2ms(v):\n",
    "    \"\"\"Convertie une vitesse de km/h en m/s\"\"\"\n",
    "    v = v*1000/3600\n",
    "    return v\n",
    "\n",
    "v1 = ____          # 50 km/h en m/s\n",
    "v2 = ____          # 130 km/h en m/s\n",
    "print(f\"50 km/h : {energie_cinetique(1.2e3, v1)/1e3:.0f} kJ\")\n",
    "print(f\"130 km/h : {energie_cinetique(____, ____)/1e3:.0f} kJ\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "74351cbb",
   "metadata": {},
   "source": [
    "### Exercice 4.1\n",
    "Écrire une fonction `R_serie(R1, R2)` et une fonction `R_parallele(R1, R2)` donnant la résistance équivalente de deux résistances. Les tester avec $R_1 = 1$ kΩ et $R_2 = 2{,}2$ kΩ (attendu : 3200 Ω et 687,5 Ω).\n",
    "Utiliser ensuite ces deux fonctions pour calculer la résistance équivalente de l'association : $R_1$ en série avec ($R_2$ en parallèle avec $R_3 = 3{,}3$ kΩ).\n",
    "\n",
    "### Exercice 4.2 - — <u>Bonus</u>\n",
    "Écrire une fonction `R_serie(R)` et une fonction `R_parallele(R)` donnant la résistance équivalente d'une liste de résistance : R est une liste de taille au moins 2.\n",
    "Tester votre code sur l'exemple précédent.\n",
    "\n",
    "### Exercice 4.3 — <u>Bonus</u>\n",
    "Écrire une fonction `hauteur_max(v0, angle_deg)` qui renvoie la hauteur maximale $\\dfrac{(v_0\\sin\\alpha)^2}{2g}$ atteinte par un projectile lancé à la vitesse $v_0$ avec un angle $\\alpha$ donné **en degrés** (penser à `math.radians`). Afficher, avec une boucle, la hauteur maximale pour les angles 15°, 30°, 45°, 60°, 75° et 90°, avec $v_0 = 10$ m/s.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a8b45b49",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Exercice 4.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "aa1a495b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Exercice 4.2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9e486457-9fb2-4cf7-b1ce-62a21c8be962",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Exercice 4.3"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bc89d365",
   "metadata": {},
   "source": [
    "---\n",
    "## Partie 5 — Premier graphique  *(20 min)*\n",
    "\n",
    "Pour tracer des courbes, on utilise deux bibliothèques qui nous serviront toute l'année :\n",
    "- `numpy` (importée sous le nom `np`) : calcul sur des **tableaux** de nombres, <u>sans écrire de boucle</u> ;\n",
    "- `matplotlib.pyplot` (importée sous le nom `plt`) : tracé de graphiques.\n",
    "\n",
    "### 5.1 Les tableaux `numpy`\n",
    "`np.linspace(debut, fin, N)` crée un tableau de $N$ valeurs régulièrement espacées, **fin incluse**. Les opérations et les fonctions `np.sin`, `np.exp`… s'appliquent **à toutes les cases à la fois**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1496b62a",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "t = np.linspace(0, 1, 5)\n",
    "print(t)\n",
    "print(2 * t)          # chaque valeur est multipliée par 2\n",
    "print(t ** 2)         # chaque valeur est élevée au carré"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3545da12",
   "metadata": {},
   "source": [
    "### Prédis puis exécute\n",
    "Que va afficher la cellule suivante ? Et que donnerait le même calcul avec une **liste** `[0, 1, 2]` au lieu d'un tableau `numpy` ? Essaie !"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "227854dc",
   "metadata": {},
   "outputs": [],
   "source": [
    "x = np.array([0, 1, 2])\n",
    "x * 3"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "00021494",
   "metadata": {},
   "source": [
    "### 5.2 Tracer une courbe\n",
    "Exemple : la position d'un objet en chute libre, $x(t) = \\tfrac{1}{2}gt^2$, pendant 2 s.\n",
    "Un graphique scientifique a **toujours** des axes légendés avec leurs unités."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "6f121e26",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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AICfn1+19Vq3bl3rXiUiMlz8CoyITEJpaSmsrKyqLHv77bfx6aefon///vj3v/+N06dPV1vP2toaJSUlzVUmETUTBiAiMgkuLi7Iy8ursuzVV1/FtWvXMGHCBJw5cwY9evTAypUrq4y5e/durV+rEZHhYgAiIoNmaWlZr7O0goODcf78+WrLvb298frrr2Pbtm1499138e2331Z5/uzZswgODtZavUSkHxiAiMigtW3bFseOHUNaWhpyc3OhVqtrHDdkyBAkJCRUCUuzZs3CH3/8gdTUVJw8eRL79+9Hp06dNM+npaXhxo0bePLJJ3XeBxE1LwYgIjJoc+fOhbm5OQICAuDq6oqMjIwaxw0bNgxSqRT79u3TLFOpVJg5cyY6deqEp556Ch06dMDq1as1z2/atAlhYWHw8fHReR9E1LwkgiAIYhdBRNQcVq9ejR07duCPP/546FiFQgF/f39s2rQJ/fv3b4bqiKg58TR4IjIZ06dPR15eHgoLCx96O4z09HTMnz+f4YfISHEPEBEREZkcHgNEREREJocBiIiIiEwOAxARERGZHAYgIiIiMjkMQERERGRyGICIiIjI5DAAERERkclhACIiIiKTwwBEREREJuf/AZY0paLfA5NMAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "g = 9.81\n",
    "t = np.linspace(0, 2, 100)       # 100 instants entre 0 et 2 s\n",
    "x = 0.5 * g * t**2               # 100 positions, calculées d'un coup\n",
    "\n",
    "plt.figure()                     # nouvelle figure\n",
    "plt.plot(t, x)                   # courbe x en fonction de t\n",
    "plt.xlabel(\"t (s)\")              # légende de l'axe horizontal\n",
    "plt.ylabel(\"x (m)\")              # légende de l'axe vertical\n",
    "plt.title(\"Chute libre\")\n",
    "plt.grid()                       # quadrillage -> aide à la lecture\n",
    "plt.show()                       # affichage"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "09d80f79",
   "metadata": {},
   "source": [
    "Pour tracer des **mesures**, on représente des **points** que l'on ne relie pas : on ajoute un marqueur, par exemple `'o'` ou `'+'`. Pour superposer plusieurs courbes, on appelle `plt.plot` plusieurs fois, avec un `label` pour la légende.\n",
    "\n",
    "Remarque : ici on n'appelle pas à nouveau numpy et matplotlib. S'ils sont importés dans une cellule, ils sont importés dans toutes les cellules. Bonne pratique : toutes les bibliothèques importées seront placées dans une unique cellule en début de document qui faudra exécuter avant les autres sinon les bibliothèques ne seront pas disponibles."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "a8bab6c1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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/PADTz/9NNHR0aSlpVGlShW6du2Kl5cXISEhrFu3jmnTppGYmEiVKlV47bXXsmcGvv/++/npp5+477778PHx4YknnuDf//73Fd+3UaNGrF27lueee44bb7wRwzCoUaMGd911FwDXXHMNixcvZvz48aSmplKrVi0WLlxI/fr1HdoeIiJSBI8/Dn//DddeCxcNzrCagkoBeHvZaF0j79pDjrJmzZo8+w4fPpxn38X9SmrVqsXixYvzfb26deuyYsWKS76fr68vM2bMYMaMGZc8Jr/3B7juuutYtWpVvo/dcMMN+f4uIiLiYhYvhnnzwMsL5swBFxr0oEs/IiIiJdmxY/Dww+b200/D9ddbW88/KKiIiIiUVIZhhpSTJ6FRIxg3zuqK8lBQERERKanmzIEvvgBfX/joI/Av2BxizqSgIiIiUhL98QcMH25uT5xonlFxQQoqIiIiJY3dDoMGQWIitG4No0dbXdElKaiIiIiUNG+9Bd99Z47umTMHvL2truiSFFRERERKkv37zdE9AK++CrVqWVvPFSioSC5vvfUWP/74o9VliIiII2RkQP/+kJoK0dHwyCNWV3RFCiolWIcOHRgxYkSufc2aNaNv37789ddfeY7/8MMPueaaa5xTnIiIFL9Jk2D7dihTBj74AGyuM8v6pSioSC5t2rRh2rRp9O3blwsXLlhdjoiIFJctW+DFF83tmBioWNHaegpIQUXyuO2221i3bh0+PlphQUTEI6SkmJd8MjOhb1/435ps7kBBxQV16NCBYcOGMWLECMqUKUN4eDjvvvsu586dY9CgQQQHB1OjRg2++eab7OesXbuWli1b4u/vT2RkJGPGjMl1RuTcuXPcd999lC5dmsjISF577bU875uens5TTz1FpUqVCAoKomXLlqxevfqytS5btozmzZsTEBBA9erVmTBhgs7EiIi4mqeegl9+gUqV4O23ra6mUEpWUDEMOHfO+beLFg8sqDlz5hAWFsaWLVsYNmwYjzzyCHfeeSdt2rRhx44dREdH079/f1JSUvjrr7/o3r071113HT/99BMxMTG8//77TJo0Kfv1Ro8ezffff8+SJUtYtWoVa9asYfv27bnec9CgQWzcuJFFixaxe/du+vbtS48ePdi3b1++Na5cuZJ7772Xxx9/nNjYWGbOnMmHH37Ii1mnFkVExHorV+aEk9mzzf4p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NjbWmDVrluHr62t89tlnTq7cvRS2nYcPH268/PLLxpYtW4xffvnFeOaZZwxfX19jx44dTq7cvRS2nbOcPXvWqF69utGlSxejcePGzinWjRWlnW+55RajVatWxurVq424uDhj8+bNxg8//ODEqt1PYdt5/fr1hpeXlzF9+nTj0KFDxvr164369esbvXr1cnLl7mX58uXGc889Z3z++ecGYCxZsuSyx1v1PVhig0rLli2NIUOG5NpXp04dY8yYMfke/9RTTxl16tTJte/hhx82rr/+eofV6AkK2875qVevnjFhwoTiLs2jFLWd77rrLuP55583xo0bp6BSAIVt52+++cYIDQ01Tp065YzyPEZh2/nVV181qlevnmvfG2+8YVSuXNlhNXqaggQVq74HS+Sln/T0dLZv306XLl1y7e/SpQs//vhjvs/ZuHFjnuOjo6PZtm0bGRkZDqvVnRWlnf/JbreTlJRE2bJlHVGiRyhqO8+ePZvffvuNcePGObpEj1CUdv7yyy9p0aIFr7zyCpUqVeLaa69l1KhRnD9/3hklu6WitHObNm34888/Wb58OYZhcOzYMT777DNuvvlmZ5RcYlj1PejWixIW1cmTJ8nMzCQ8PDzX/vDwcI4ePZrvc44ePZrv8RcuXODkyZNERkY6rF53VZR2/qfXXnuNc+fO0adPH0eU6BGK0s4HDx5kzJgxrF+/Hh+fEvm/gUIrSjsfOnSIDRs2EBAQwJIlSzh58iSPPvoop0+fVj+VSyhKO7dp04b58+dz1113kZqayoULF7jlllt48803nVFyiWHV92CJPKOSxWaz5bpvGEaefVc6Pr/9klth2znLwoULGT9+PIsWLaJChQqOKs9jFLSdMzMz6devHxMmTODaa691VnkeozCfZ7vdjs1mY/78+bRs2ZLu3bszdepUPvzwQ51VuYLCtHNsbCyPP/44Y8eOZfv27axYsYK4uDiGDBnijFJLFCu+B0vkP6XCwsLw9vbOk86PHz+eJy1miYiIyPd4Hx8fypUr57Ba3VlR2jnLokWLGDx4MJ9++imdOnVyZJlur7DtnJSUxLZt29i5cyePPfYYYH6hGoaBj48Pq1atomPHjk6p3Z0U5fMcGRlJpUqVci1nX7duXQzD4M8//6RWrVoOrdkdFaWdp0yZQtu2bRk9ejQAjRo1IigoiBtvvJFJkybpjHcxsep7sESeUfHz86N58+asXr061/7Vq1fTpk2bfJ/TunXrPMevWrWKFi1a4Ovr67Ba3VlR2hnMMykDBw5kwYIFusZcAIVt55CQEPbs2cOuXbuyb0OGDKF27drs2rWLVq1aOat0t1KUz3Pbtm35+++/SU5Ozt73yy+/4OXlReXKlR1ar7sqSjunpKTg5ZX768zb2xvI+Re/XD3Lvgcd2lXXhWUNf3v//feN2NhYY8SIEUZQUJBx+PBhwzAMY8yYMUb//v2zj88alvXEE08YsbGxxvvvv6/hyQVQ2HZesGCB4ePjY7z99ttGfHx89u3s2bNW/QpuobDt/E8a9VMwhW3npKQko3LlysYdd9xh7Nu3z1i7dq1Rq1Yt44EHHrDqV3ALhW3n2bNnGz4+PsaMGTOM3377zdiwYYPRokULo2XLllb9Cm4hKSnJ2Llzp7Fz504DMKZOnWrs3Lkzexi4q3wPltigYhiG8fbbbxtVqlQx/Pz8jGbNmhlr167NfmzAgAFG+/btcx2/Zs0ao2nTpoafn59RtWpVIyYmxskVu6fCtHP79u0NIM9twIABzi/czRT283wxBZWCK2w779+/3+jUqZNRqlQpo3LlysbIkSONlJQUJ1ftfgrbzm+88YZRr149o1SpUkZkZKRxzz33GH/++aeTq3Yv33///WX/f+sq34M2w9B5MREREXFNJbKPioiIiLgHBRURERFxWQoqIiIi4rIUVERERMRlKaiIiIiIy1JQEREREZeloCIiIiIuS0FFREREXJaCioi4nAMHDhAREUFSUtIVj92zZw+VK1fm3LlzTqhMRJxNQUVEnKJDhw6MGDGiQMc+99xzDB06lODg4Cse27BhQ1q2bMnrr79+lRWKiCtSUBERl/Lnn3/y5ZdfMmjQoAI/Z9CgQcTExJCZmenAykTECgoqIuJwAwcOZO3atUyfPh2bzYbNZuPw4cP5HvvJJ5/QuHFjKleunL3v999/p2fPnpQpU4agoCDq16/P8uXLsx+Pjo7m1KlTrF271tG/iog4mY/VBYiI55s+fTq//PILDRo0YOLEiQCUL18+32PXrVtHixYtcu0bOnQo6enprFu3jqCgIGJjYyldunT2435+fjRu3Jj169fTsWNHx/0iIuJ0Cioi4nChoaH4+fkRGBhIRETEZY89fPgwzZs3z7Xvjz/+4Pbbb6dhw4YAVK9ePc/zKlWqdMmzNCLivnTpR0Rcyvnz5wkICMi17/HHH2fSpEm0bduWcePGsXv37jzPK1WqFCkpKc4qU0ScREFFRFxKWFgYZ86cybXvgQce4NChQ/Tv3589e/bQokUL3nzzzVzHnD59+pKXk0TEfSmoiIhT+Pn5FWhUTtOmTYmNjc2zPyoqiiFDhrB48WKefPJJZs2alevxvXv30rRp02KrV0Rcg4KKiDhF1apV2bx5M4cPH+bkyZPY7fZ8j4uOjmbjxo25Qs2IESNYuXIlcXFx7Nixg++++466detmP3748GH++usvOnXq5PDfQ0ScS0FFRJxi1KhReHt7U69ePcqXL88ff/yR73Hdu3fH19eXb7/9NntfZmYmQ4cOpW7dunTt2pXatWszY8aM7McXLlxIly5dqFKlisN/DxFxLpthGIbVRYiIXGzGjBl88cUXrFy58orHpqWlUatWLRYuXEjbtm2dUJ2IOJOGJ4uIy3nooYc4c+YMSUlJV5xG//fff+e5555TSBHxUDqjIiIiIi5LfVRERETEZSmoiIiIiMtSUBERERGXpaAiIiIiLktBRURERFyWgoqIiIi4LAUVERERcVkKKiIiIuKyFFRERETEZf0/rqG7LqSIRYwAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "t_mes = [0.0, 0.2, 0.4, 0.6, 0.8, 1.0]           # (s)\n",
    "x_mes = [0.00, 0.21, 0.77, 1.78, 3.12, 4.93]     # (m)\n",
    "\n",
    "t = np.linspace(0, 1, 100)\n",
    "\n",
    "plt.figure()\n",
    "plt.plot(t_mes, x_mes, 'o', label=\"mesures\")\n",
    "plt.plot(t, 0.5 * 9.81 * t**2, 'r-', label=\"modèle\")\n",
    "plt.xlabel(\"t (s)\")\n",
    "plt.ylabel(\"x (m)\")\n",
    "plt.legend()\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "17e9f512",
   "metadata": {},
   "source": [
    "### Application guidée\n",
    "Tracer la tension $u(t) = U_m\\cos(2\\pi f t)$ du secteur ($U_m = 325$ V, $f = 50$ Hz) sur trois périodes, avec l'axe des temps en millisecondes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5da71b9c",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "Um = ____\n",
    "f = ____\n",
    "T = ____                              # période (s)\n",
    "t = np.linspace(0, ____, 500)         # trois périodes\n",
    "u = ____\n",
    "\n",
    "plt.figure()\n",
    "plt.plot(t * 1e3, u)                 # t * 1e3 : temps en ms\n",
    "plt.xlabel(____)\n",
    "plt.ylabel(____)\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9e3ff9f2",
   "metadata": {},
   "source": [
    "### Exercice 5.1\n",
    "Tracer sur un même graphique la charge d'un condensateur $u(t) = E\\left(1 - e^{-t/\\tau}\\right)$ pour $E = 5$ V et $\\tau = 1$ ms, et la droite horizontale $u = E$ (on peut utiliser `plt.axhline(5, color='k', linestyle='--')`), sur l'intervalle $[0 ; 5\\tau]$. Ajouter une légende.\n",
    "Lire sur le graphique la valeur de $u$ à $t = \\tau$ et vérifier qu'elle vaut environ 63 % de $E$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1774d8a2",
   "metadata": {},
   "outputs": [],
   "source": [
    "# À toi de jouer"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a20766a",
   "metadata": {},
   "source": [
    "---\n",
    "## Partie 6 — Mini-projet de synthèse  *(10 min, à terminer à la maison si besoin)*\n",
    "\n",
    "**Chute libre du haut de monuments célèbres.** On lâche une bille sans vitesse initiale et on néglige les frottements.\n",
    "\n",
    "1. Écrire une fonction `duree_chute(h)` qui renvoie la durée de chute (s) d'une hauteur `h` (m), sachant que $h = \\tfrac{1}{2}g t^2$.\n",
    "2. Écrire une fonction `vitesse_impact(h)` qui renvoie la vitesse (en km/h) au moment de toucher le sol, sachant que $v = g\\,t$.\n",
    "3. Avec une boucle, afficher un tableau propre pour les monuments ci-dessous, du type\n",
    "   `Tour Eiffel      :  h = 300 m   t = 7.8 s   v = 276 km/h`\n",
    "   (le format `{nom:15s}` aligne un texte sur 15 caractères).\n",
    "4. Tracer, sur un même graphique, la position $x(t)$ pendant la chute depuis chacun des monuments, chaque courbe s'arrêtant à l'impact.\n",
    "5. *Bonus* : en réalité, une bille de 1 cm dans l'air atteint une vitesse limite d'environ 100 km/h. Pour quels monuments le modèle de la chute libre est-il manifestement faux ? (Le cas de la chute avec frottement sera traité plus tard dans l'année.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d6c0e702",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "noms = [\"Capitole\", \"Tour Eiffel\", \"Burj Khalifa\"]\n",
    "hauteurs = [30, 300, 828]      # (m) — le Capitole : hauteur approximative de la façade\n",
    "g = 9.81\n",
    "\n",
    "# 1. et 2. Les fonctions\n",
    "\n",
    "\n",
    "# 3. Le tableau\n",
    "\n",
    "\n",
    "# 4. Le graphique"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1be7b61a",
   "metadata": {},
   "source": [
    "---\n",
    "## Bilan — ce que je sais faire\n",
    "\n",
    "Coche mentalement chaque ligne : si l'une d'elles n'est pas acquise, reprends la partie correspondante, puis entraîne-toi avec le notebook « 0. Bases de Python ».\n",
    "\n",
    "| Je sais… | Partie |\n",
    "|---|---|\n",
    "| exécuter une cellule, relancer tout le notebook dans l'ordre | 0 |\n",
    "| écrire un calcul avec `**`, des parenthèses et la notation `6.02e23` | 1 |\n",
    "| lire un message d'erreur et trouver la ligne fautive | 1 |\n",
    "| afficher un résultat avec un nombre adapté de chiffres significatifs | 2 |\n",
    "| accéder à un élément d'une liste, la parcourir avec `for`, la remplir avec `append` | 3 |\n",
    "| importer une bibliothèque et définir une fonction avec `def` et `return` | 4 |\n",
    "| créer un tableau avec `np.linspace` et tracer une courbe avec axes légendés et unités | 5 |\n",
    "\n",
    "**Aide-mémoire de la séance**\n",
    "\n",
    "```python\n",
    "import math                      # fonctions mathématiques sur des nombres\n",
    "import numpy as np               # calcul sur des tableaux\n",
    "import matplotlib.pyplot as plt  # graphiques\n",
    "\n",
    "x = 2.5e-3                       # variable (point décimal, notation scientifique)\n",
    "print(f\"x = {x:.2e} m\")          # affichage formaté\n",
    "\n",
    "L = [1, 2, 3]                    # liste ; L[0] premier élément, len(L) longueur\n",
    "for valeur in L:                 # boucle : deux points + indentation\n",
    "    print(valeur)\n",
    "\n",
    "def carre(a):                    # fonction\n",
    "    return a**2\n",
    "\n",
    "t = np.linspace(0, 1, 100)       # 100 valeurs de 0 à 1\n",
    "\n",
    "# Tracé une figure\n",
    "plt.figure()\n",
    "plt.plot(t, carre(t));\n",
    "plt.xlabel(\"t (s)\");\n",
    "plt.ylabel(\"...\");\n",
    "plt.grid();\n",
    "plt.show()\n",
    "```"
   ]
  }
 ],
 "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.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
