{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Exercices du livre - Chapitre 6\n",
    "\n",
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### Exercice 1 ✓\n",
    "\n",
    "  Saisir le numérateur et le dénominateur (non nul) d'une fraction rationnelle. Utilisez la fonction `gcd()` du module `math` pour afficher la fraction réduite."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Exercice 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exercice 2 ✓✓\n",
    "\n",
    "  À l'aide du module `turtle` pour la partie graphique, écrivez une fonction `polygone_regulier()` qui permet de tracer des polygones réguliers à $n$ cotés (paramétrable) ayant chacun la longueur spécifiée. Ce module comportera un auto-test qui vérifiera le bon fonctionnement de la fonction.\n",
    "  ![turtle1](../data/turtle_m.png)\n",
    "\n",
    "  Utiliser ce module pour écrire une fonction qui permet de tracer `n` polygones réguliers en démarrant à des angles répartis régulièrement sur un tour complet.\n",
    "    ![turtle2](../data/turtle.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Exercice 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exercice 3 ✓✓✓\n",
    "\n",
    "  Un **pangramme** est une phrase comportant toutes les lettres de l'alphabet. Donc, en français, un pangramme comporte au moins 26 lettres.\n",
    "\n",
    "  Dans un module, définissez la fonction `est_pangramme` qui reçoit une chaîne à tester et un alphabet (on prendra par défaut `string.ascii_lowercase`). La fonction retourne un booléen, `True` si la chaîne est un pangramme, `False` sinon.\n",
    "\n",
    "  **Conseil :** les propriétés de la structure `set` peuvent être intéressantes...\n",
    "\n",
    "  Dans un autre fichier, le programme principal teste les chaînes suivantes :\n",
    "```python\n",
    "s1 = \"Portez ce vieux whisky au juge blond qui fume\"\n",
    "s2 = \"Le vif renard brun saute par-dessus le chien paresseux\"\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Exercice 3"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exercice 4 ✓✓\n",
    "\n",
    "Nombres parfaits et nombres chanceux. \n",
    "\n",
    "Définitions :\n",
    "\n",
    "- on appelle *nombre premier* tout entier naturel supérieur à $1$ qui possède exactement deux diviseurs, lui-même et l'unité ;\n",
    "- on appelle *diviseur propre* de $n$, un diviseur quelconque de $n$, $n$ exclu ;\n",
    "- un entier naturel est dit **parfait** s'il est égal à la somme de tous ses diviseurs propres ;\n",
    "- un entier $n$ tel que $n+i+i^2$ est premier pour tout $i$ dans $[0, n-2]$ est dit **chanceux**.\n",
    "\n",
    "  Écrire un fichier `parfait_chanceux_m.py` définissant quatre fonctions `som_div()`, `est_parfait()`, `est_premier()`, `est_chanceux()` et un auto-test :\n",
    "  \n",
    "- la fonction `som_div()` retourne la somme des diviseurs propres de son argument ;\n",
    "- les trois autres fonctions vérifient que leur argument possède la propriété donnée par leur définition et retournent un booléen. Si par exemple la fonction  `est_premier()` vérifie que son argument est premier, elle retourne **`True`**, sinon elle retourne **`False`**.\n",
    "\n",
    "  L'auto-test doit comporter quatre appels à la fonction `isclose()` du module `math` permettant de tester `som_div(12)`, `est_parfait(6)`, `est_premier(31)` et `est_chanceux(11)`.\n",
    "  \n",
    "   Puis écrire le programme principal (`parfait_chanceux.py`) qui comporte :\n",
    "\n",
    "- l'initialisation de deux listes `parfaits` et `chanceux` ;\n",
    "- une boucle de parcours de l'intervalle $[2, 1000]$ incluant les tests nécessaires pour remplir ces listes ;\n",
    "- enfin l'affichage de ces listes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Exercice 4"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
