{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Chapitre 2 : \"La calculatrice Python\"\n",
    "\n",
    "### <span class=\"bg-info\">« *Le plus long des voyages commence par le premier pas.* »</span>\n",
    "\n",
    "Lao Tseu\n",
    "\n",
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### <span class=\"bg-success\">CE QU'IL FAUT RETENIR</span>\n",
    "\n",
    "- Python comporte deux modes d'exécution : le *mode interprété* et le *mode script*.\n",
    "- Les données peuvent être nommées *via* des variables (identificateurs), les mots réservés de Python ne doivent pas être utilisés comme nom de variable.\n",
    "- Python comporte deux types de données entiers : `int` et `bool`, et deux types de données flottants : `float` et `complex`.\n",
    "- On affecte une variable en utilisant le signe `=`. On compare l'égalité de deux variables en utilisant `==`.\n",
    "- Les chaînes de caractères sont représentées par le type *non modifiable* `str`.\n",
    "- L'indexation est la position d'un caractère dans une chaîne. Elle utilise l'opérateur `[]`. L'index est un *entier qui commence à 0*.\n",
    "- Saisies au clavier. On utilise la fonction `input()`.\n",
    "- Affichage à l'écran. On utilise la fonction `print()`.\n",
    "\n",
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_01 ✓\n",
    "Assigner les valeurs respectives `3`, `5` et `7` à trois variables `a`, `b` et `c` en utilisant des affectations parallèles.\n",
    "\n",
    "Effectuer les opérations `a-b/c`, `(a-b)/c`, `a/b/c` et `a/b*c` et afficher les résultats."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# exo02_01\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_02 ✓\n",
    "Saisir les valeurs degrés, minutes et secondes d'un angle, puis le convertir en radians.  \n",
    "Faire également la conversion inverse depuis une saisie en radians.\n",
    "\n",
    "Afficher une valeur approchée, avec deux décimales, de 1 radian exprimé en degrés."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_02\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_03 ✓\n",
    "Saisir une température en degrés Celsius ($T_C$), puis la convertir en degré Fahrenheit ($T_F$).\n",
    "Faire également la conversion inverse.\n",
    "\n",
    "On donne : $T_F = 1,8 \\times T_C + 32$\n",
    "\n",
    "Afficher une valeur approchée, avec deux décimales, de 20 °F exprimés en °C. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_03\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_04 ✓✓\n",
    "Écrire un script qui calcule le périmètre et l'aire d'un triangle quelconque dont on saisira les trois côtés par la commande `input()`.\n",
    "\n",
    "*Rappels :*\n",
    "\n",
    "- L'aire vaut : $A = \\sqrt{d(d-a)(d-b)(d-c)}$ où $d$ est le demi-périmètre ($\\frac{a+b+c}{2}$), $a$, $b$ et $c$ les longueurs des trois côtés.\n",
    "- Pour que trois côtés forment un triangle, il faut que la longueur de chacun soit inférieure à la somme des deux autres. \n",
    "\n",
    "Si les longueurs des côtés saisies ne forment pas un triangle, afficher un message d'erreur et ne pas faire les calculs."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_04\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_05 ✓\n",
    "Écrire un script qui fasse saisir une chaîne et un caractère de séparation, et qui l'insére entre les caractères de la chaîne.\n",
    "\n",
    "Utiliser la fonction `join()`.\n",
    "\n",
    "Par exemple, si l'utilisateur saisit  `\"Gaston\"` et choisit `\"*\"`, alors le script affichera `\"G*a*s*t*o*n\"`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_05\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_06 ✓\n",
    "Écrire un script qui fasse saisir la longueur $l$ d'un pendule simple et qui calcule sa période $T$.\n",
    "\n",
    "**On donne :** $T = 2 \\pi \\sqrt{\\frac{l}{g}}$, où $g$ est l'accélération de la pesanteur, $g$ = 9,81 m/s<sup>2</sup>\n",
    "\n",
    "Afficher le résultat sans oublier les unités !\n",
    "\n",
    "Quelle est la période correspondant à un pendule suspendu en haut de la tour Eiffel ($l$ = 300 m) ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_06\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_07 ✓\n",
    "Écrire un script qui convertit en mètres par seconde, en km/h et en nœuds une vitesse saisie en miles/heure (mph).\n",
    "\n",
    "**On donne :**\n",
    "\n",
    "- 1 mile = 1609 m\n",
    "- 1 nœud = 1 mille/h\n",
    "- 1 mille = 1852 m (on dit aussi un *mille nautique* ou un *nautique*)\n",
    "\n",
    "Tester les conversions pour 1 mph."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_07\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_08 ✓✓\n",
    "Saisir trois longueurs `a`, `b` et `c`. Déterminer si elles permettent de construire un triangle (voir [exo02_04](#exo02_04) pour les contraintes de construction d'un triangle à partir de trois longueurs).\n",
    "\n",
    "Dans l'affirmative, préciser si le triangle est [rectangle](https://fr.wikipedia.org/wiki/Triangle_rectangle), isocèle (deux côtés égaux), [équilatéral](https://fr.wikipedia.org/wiki/Triangle_%C3%A9quilat%C3%A9ral) ou quelconque.\n",
    "\n",
    "Sinon, afficher : `\"Les longueurs saisies ne forment pas un triangle !\"`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_08\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_09 ✓\n",
    "Écrire un script qui convertit un (grand) nombre entier de secondes en un nombre d'années, de mois, de jours, d'heures, de minutes et de secondes.  \n",
    "Pour cet exercice, on considérera que tous les mois ont 30 jours et qu'une année comporte 365 jours.\n",
    "\n",
    "Effectuez le calcul pour $10^8$ secondes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_09\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_10 ✓\n",
    "En astronomie, une approximation classique est : 1 année vaut : $\\pi \\times 10^7$ secondes.\n",
    "\n",
    "Quelle est l'erreur relative de cette approximation pour une année non bissextile ?\n",
    "\n",
    "**Rappel :** L'[erreur relative](https://fr.wikipedia.org/wiki/Erreur_relative) d'une approximation $a$ par rapport à une valeur réelle $r$ se calcule en prenant : $$\\frac{a - r}{r}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_10\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_11 ✓\n",
    "*Le produit scalaire*\n",
    "\n",
    "On représente des vecteurs en dimension 3 $(x, y, z)$ par des listes de 3 éléments.\n",
    "\n",
    "Saisir deux listes de trois flottants. Par exemple :\n",
    "```python\n",
    "v = [1.0, 2.0, 3.0]\n",
    "w = [4.0, 5.0, 6.0]\n",
    "```\n",
    "\n",
    "Écrire un script qui calcule et affiche le produit scalaire de ces deux vecteurs et le cosinus de l'angle entre ces deux vecteurs.\n",
    "\n",
    "Quel est le cosinus de l'angle entre les vecteurs $v$ et $w$ ?\n",
    "\n",
    "**On donne :** \n",
    "\n",
    "- Le produit scalaire de deux vecteurs $v(v_x, v_y, v_z)$ et $w(w_x, w_y, w_z)$ est $ps = (v_x . w_x + v_y . w_y + v_z . w_z)$.\n",
    "- La norme d'un vecteur  $v(x, y, z)$ est $|v| = \\sqrt{x^2 + y^2 + z^2}$.\n",
    "- Le cosinus entre deux vecteurs v et w est $\\frac{ps}{|v| . |w|}$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_11\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_12 ✓\n",
    "*Le produit vectoriel*\n",
    "\n",
    "On représente les vecteurs en dimension 3 et en repère orthonormé par des listes de 3 éléments.\n",
    "\n",
    "Saisir deux listes de trois flottants. Par exemple :\n",
    "```python\n",
    "v = [1.0, 2.0, 3.0]\n",
    "w = [4.0, 5.0, 6.0]\n",
    "```\n",
    "\n",
    "Écrire un script qui calcule et affiche le produit vectoriel de ces deux vecteurs et le sinus de l'angle géométrique entre ces deux vecteurs.\n",
    "\n",
    "**On donne :**\n",
    "\n",
    "- Le produit vectoriel $pv(pv_x, pv_y, pv_z)$ de deux vecteurs $v(v_x, v_y, v_z)$ et $w(w_x, w_y, w_z)$ est :\n",
    "    - $pv_x = v_y . w_z - v_z . w_y$\n",
    "    - $pv_y = v_z . w_x - v_x . w_z$\n",
    "    - $pv_z = v_x . w_y - v_y . w_x$\n",
    "\n",
    "- Le sinus entre deux vecteurs $v$ et $w$ est $\\frac{|pv|}{|v|.|w|}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_12\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_13 ✓✓\n",
    "Soit la chaîne de caractères suivante :\n",
    "\n",
    "`dna = \"tgaattctatgaatggactgtcccaaagaagtagggacccac\"`\n",
    "\n",
    "Écrire un script qui affiche la chaîne `dna` après avoir remplacé la lettre `\"a\"` par `\"t\"` **puis** la lettre  `\"t\"` par `\"g\"`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_13\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_14 ✓✓\n",
    "Soit la chaîne de caractères suivante :\n",
    "\n",
    "`s = \"abcababc\"`\n",
    "\n",
    "Écrire un script créant une nouvelle chaîne en regroupant tous les `\"a\"` en début de chaîne tout en conservant l'ordre des autres caractères."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_14\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_15 ✓✓\n",
    "Soit la chaîne de caractères suivante :\n",
    "\n",
    "`s = \"abcababc\"`\n",
    "\n",
    "Écrire un script créant une nouvelle chaîne en comptant le nombre de `\"a\"`, en les supprimant de la chaîne d'origine et en insérant ce nombre en fin de chaîne (pour notre exemple : `\"bcbbc3\"`)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_15\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_16 ✓\n",
    "On donne les [nombres complexes](https://fr.wikiversity.org/wiki/Calcul_avec_les_nombres_complexes/Op%C3%A9rations_sous_forme_alg%C3%A9brique) suivants : $z_1 = -1 + 2j$ et $z_2 = 3 + 4j$\n",
    "\n",
    "Calculer :\n",
    "\n",
    "1. $z_1 + z_2$\n",
    "2. $z_1 - z_2$\n",
    "3. $z_1 - 3z_2$\n",
    "4. $z_1z_2$\n",
    "5. $\\frac{z_1}{z_2}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_16\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_17 ✓\n",
    "Calculer :\n",
    "\n",
    "1. $\\frac{1}{4 + 2j}$\n",
    "2. $\\frac{2}{1 - j} - \\frac{5}{1 + i}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_17"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_18 ✓\n",
    "Soit la chaîne de caractères suivante :\n",
    "\n",
    "\tadn = \"tgaattctatgaatggactgtcccaaagaagtagggacccac\"\n",
    "    \n",
    "Afficher la chaîne `dna`, [palindrome](https://fr.wikipedia.org/wiki/Palindrome) de la chaine `adn`.\n",
    "\n",
    "**Conseil :** N'utilisez que la gestion des indices de la chaîne `adn`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_18"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_19 ✓\n",
    "Affecter les variables `temps` et `distance` par les valeurs `6.892 s` et `19.7 m`.\n",
    "\n",
    "Calculer et afficher la valeur de la vitesse ($vitesse = \\frac{distance}{temps}$).\n",
    "\n",
    "Améliorer l’affichage en imposant un chiffre après le point décimal, sans oublier l'unité !"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_19"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo02_20 ✓\n",
    "\n",
    "En électronique, les *résistances* sont des composants très fréquents.  \n",
    "Les résistances peuvent être associées en **série** ou en **parallèle**. Dans les deux cas, on veut calculer la [*résistance équivalente*](https://fr.wikipedia.org/wiki/R%C3%A9sistance_%C3%A9quivalente) du montage.\n",
    "\n",
    "Sachant que :\n",
    "\n",
    "- la résistance équivalente $R_{eq}$ de deux résistance $R_1$ et $R_2$ en série est : $R_{eq} = R_1 + R_2$ ;\n",
    "- la résistance équivalente $R_{eq}$ de deux résistance $R_1$ et $R_2$ en parallèle est telle que : $\\frac{1}{R_{eq}} = \\frac{1}{R_1} + \\frac{1}{R_2}$.\n",
    "\n",
    "Afficher la résistance équivalente de deux résistance de 100 ohms.\n",
    "\n",
    "**Rappel :** Pour additionner deux fractions, il faut les ramener au même dénominateur : $\\frac{a}{b} + \\frac{c}{d} = \\frac{ad}{bd} + \\frac{bc}{bd} = \\frac{ad + bc}{bd}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo02_20"
   ]
  }
 ],
 "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.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
