"source": "<div style=\"padding:20px;background-color:papayawhip;\" > \n<h3 style=\"color:chocolate\"> <i class=\"fa fa-info\" aria-hidden=\"true\"> </i> Remarque introductive <i class=\"fa fa-info\" aria-hidden=\"true\"></h3> \n<p> Ce fichier est fait pour être lu sur le site <a href=\"https://notebook.basthon.fr/\"><img src='https://notebook.basthon.fr/assets/efede5218c9087496f16.png' style=\"border: 0; display:inline; margin: 0 5px; height:30px\" alt=\"Basthon\"/></a>. <br>\n \nSi vous l'avez ouvert avec un autre programme, comme Jupyter notebook, vous riquez de rencontrer quelques bugs. <br>\nVeuillez cliquez sur <a href=\"https://notebook.basthon.fr/\">ce lien</a> et y charger ce fichier à l'aide du bouton \"Ouvrir\" <i class=\"fa fa-folder\" aria-hidden=\"true\"> </i>\n</p> </div> "
},
{
"cell_type": "markdown",
"metadata": {},
"source": "# Questionner - `input()`\n\nDans ce chapitre, nous découvrons comment un programme peut poser une question lors de son exécution. L'utilisateur du programme peut alors répondre et entrer une information. La réponse sera stockée dans la mémoire de l'ordinateur et sera associée à une variable. Grâce à cette variable, le programme peut traiter la réponse fournie, et le résultat peut être affiché. Nous allons voir que :\n\n- la fonction `input('question')` demande une information,\n- une variable, par exemple `x`, mémorise une information,\n- la fonction `print()` affiche un texte (une réponse).\n\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## La fonction `input()`\n\nLa fonction `input('question')` permet de demander une entrée (input) à l'utilisateur.\nL'utilisateur voit le texte `question` affiché à la console et doit répondre à cette question. Il termine son entrée avec la touche Enter.\n\nLa réponse de l'utilisateur est ensuite mémorisée dans une variable que nous appelons `x` dans cet exemple.\nEnsuite, nous pouvons utiliser cette variable `x` dans la suite du programme, par exemple comme argument dans une fonction `print()`.\n\n"
"source": "## La fonction `print()`\n\nLa fonction `print()` peut accepter un ou plusieurs arguments, séparés par une virgule. Un espace est inséré à la place de la virgule.\nAppeler la fonction `print()` sans argument, insère une ligne vide.\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "x = input('Entrez votre nom: ')\nprint() # sans argument - ligne vide\nprint('Hello') # un argument\nprint('Bonjour', x) # deux arguments\nprint(x, 'comment vas-tu?')\nprint(x, 'restera toujours', x) # trois arguments\nprint(x, 'voit', x, 'qui voit', x) # cinq arguments\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## La variable\n\nUne variable est une place en mémoire pour stocker de l'information.\nVous êtes complètement libres dans le choix des noms pour les variables, mais il est recommandé de choisir des noms qui sont le plus explicites possible. C'est mieux d'utiliser des noms de variable parlants, comme `nom` et `age`, même si on avait pu utiliser `x` et `y`. \n\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 1 </h3>Ajoutez une troisième question et utilisez la réponse dans un `print()`.\n\n"
"source": "## Demander un nombre\n\nLa fonction `input()` permet d'obtenir une entrée de l'utilisateur. Mais attention !\nLa valeur retournée est une chaine de caractères (de type string `str`). Nous pouvons le prouver avec la fonction `type()`.\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "x = input('Entrez un nombre: ')\nprint(type(x))\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Pour pouvoir utiliser cette valeur dans un calcul, nous devons la transformer en nombre. Pour convertir une chaine de caractères en un nombre à virgule flottante nous utilisons la fonction de conversion `float()`.\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "x = '1.5'\nprint(type(x)) # la variable x contient une chaîne\nprint(type(float(x))) # la fonction float(x) renvoie un nombre\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Opérations de base\n\nEn Python, nous retrouvons les 4 opérations arithmétiques de base :\n\n- addition (`+`)\n- soustraction (`-`)\n- multiplication (`*`)\n- division (`/`)\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "print('Opérations de base')\na = float(input('Entrez un nombre: '))\nb = float(input('Entrez un nombre: '))\nprint()\nprint('Addition ', a + b)\nprint('Soustraction ', a - b)\nprint('Multiplication', a * b)\nprint('Division ', a / b)\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Puissance\n\nEn Python l'opérateur de puissance est `**`. Ne le confondez pas avec le symbole `^` utilisé dans d'autres langages tel qu’Excel.\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "print('Puissance')\na = float(input('Entrez un nombre: '))\nn = float(input('Entrez un exposant: '))\nprint()\nprint(a, 'puissance', n, '=', a ** n)\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Nous pouvons utiliser une puissance de 0.5 pour calculer une racine.\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "print('Racine')\na = float(input('Entrez un nombre: '))\nprint('La racine de', a, 'est', a ** 0.5)\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Nous pouvons maintenant calculer une diagonale, en utilisant le théorème de Pythagore.\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "print('Pythagore')\na = float(input('Entrez un nombre a: '))\nb = float(input('Entrez un nombre b: '))\nprint()\nprint('La diagonale est', (a ** 2 + b ** 2) ** 0.5)\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Division entière\n\nEn Python, nous avons un opérateur spécial pour la division entière (`//`) ainsi que pour le reste de la division entière. L'opérateur pour le reste de la division entière est `%` est s'appelle **modulo**.\n\nCette fois-ci nous transformons la chaine pas en nombre à virgule flottante (`float`), mais en nombre enter (`int`).\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "print('Division entière')\na = int(input('Entrez un entier a: '))\nb = int(input('Entrez un entier b: '))\nprint()\nprint('Division normale ', a / b)\nprint('Division entière ', a // b)\nprint('Reste de la division', a % b)\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "<h3 style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-question\" aria-hidden=\"true\"> </i> Quizz </h3> \n \n```\nQuel est le résultat de l'expression `10 % 3` ?\n\nA) 1\nB) 2\nC) 3\nD) 3.333333\n```"
"source": "## Calcul géométrique\n\nDans l'exemple suivant, on demande le rayon et on affiche rayon, diamètre et circonférence. Ajoutez la surface du cercle en utilisant la formule :\n\n$$ S = \\pi r^2 $$\n\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 2 </h3>Complétez le programme pour afficher la surface du cercle.\n\n"
"source": "Nous pouvons également créer des programmes où nous demandons plusieurs valeurs à l'utilisateur. Cette fois, nous permettons seulement l'utilisation de nombres entiers, et donc transformons la chaine obtenue avec `int()` en nombre entier.\n\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 3 </h3>Complétez le programme pour afficher le périmètre et la diagonale.\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "print('Rectangle')\na = float(input('Entrez la largeur: '))\nb = float(input('Entrez la longueur: '))\n\nprint('surface =', a * b)\nprint('périmètre =', ...)\nprint('diagonale =', ...)\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Créer un quiz\n\nPour faire des petits quiz, nous créons des paires de mots qui vont ensemble. Par exemple pays et capitale dans un cours de géographie, ou une liste de vocabulaire en deux langues, pour un cours de langue.\n\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "### Séquence de questions\n\nNous mettons les deux valeurs `question` et `solution` dans un tuple et nous regroupons ces paires dans un deuxième tuple que nous appelons `quiz`\n\nQuand nous parcourons `quiz` avec une boucle `for` nous pouvons utiliser une seule variable, par exemple `x` et lui affecter le tuple `(question, solution)`\n\nNous pouvons aussi parcourir le quiz avec un tuple de deux variables `(q, s)` et associer les deux valeurs séparément à chaque variable : donc\n`q = question` et `s = solution`.\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "\nquiz = (('France', 'Paris'),\n ('Allemagne', 'Berlin'),\n ('Suisse', 'Berne'))\n\nprint('parcourir avec x')\nfor x in quiz:\n print('x =', x)\n\nprint()\nprint('parcourir avec (q, s)')\nfor (q, s) in quiz:\n print('q =', q, ' s =', s)\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "### Poser une question\n\nNous pouvons maintenant extraire la question et la poser plusieurs fois dans une boucle `for`. Avec `input()` nous demandons la réponse. Nous séparons les questions avec un `print()` sans argument pour insérer une ligne vide entre les questions.\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "\nquiz = (('France', 'Paris'),\n ('Allemagne', 'Berlin'),\n ('Suisse', 'Berne'))\n\nfor (q, s) in quiz:\n print('Quelle est la capitale de', q)\n reponse = input('Votre réponse: ')\n print()\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "### Evaluer une réponse\n\nNous introduisons ici déjà la structure `if-else` que nous allons voir en détail plus tard.\n\nLe mot-clé `if` est suivi d'une condition. Ici nous comparons la réponse donnée par l'utilisateur avec la solution connue par le programme.\n\nL'expression `reponse == solution` renvoie comme valeur `True` ou `False`. Selon cette valeur, un des deux blocs est exécuté.\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "\nquiz = (('France', 'Paris'),\n ('Allemagne', 'Berlin'),\n ('Suisse', 'Berne'))\n\nfor (question, solution) in quiz:\n print('Quelle est la capitale de', question)\n reponse = input('Votre réponse: ')\n if reponse == solution:\n print('correct')\n else:\n print('FAUX! La bonne réponse est', solution)\n print()\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "### Quiz avec score\n\nComment ajouter un score ?\n\nIl faut ajouter 3 éléments de code pour:\n\n- initialiser une variable au début\n- augmenter la valeur avec chaque bonne réponse\n- afficher le score à la fin\n\n"
"source": "Nous reprenons l'exemple du [chapitre précédent](prog1.randomiser) et nous ajoutons le calcul du score\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "score = 0\nquiz = (('France', 'Paris'),\n ('Allemagne', 'Berlin'),\n ('Suisse', 'Berne'))\n\nfor (question, solution) in quiz:\n print('Quelle est la capitale de', question)\n reponse = input('Votre réponse: ')\n if reponse == solution:\n print('correct')\n score = score + 1\n else:\n print('FAUX! La bonne réponse est', solution)\n print()\n\nprint('Votre score: ', score, 'sur', len(quiz))\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "### Quiz mathématique\n\nNous utilisons un tuple avec deux valeurs (a, b) que nous mettons dans un deuxième tuple.\nCette fois nous avons pas besoin de donner une solution, car nous pouvons la calculer.\n\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 4 </h3>Ajoutez le score pour ce quiz.\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "print('Quiz addition')\nquiz = ((12, 35), (23, 11), (55, 23))\n\nfor (a, b) in quiz:\n print(a, '+', b, '=')\n reponse = int(input())\n if reponse == a + b:\n print('correct')\n else:\n print('FAUX. La bonne réponse est', a + b)\n print()\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Erreurs\n\nDans des chapitres précédents, nous avons déjà vu quelques messages d'erreurs. Mais il y en a d'autres que nous allons voir ici.\nIl est important de bien comprendre les messages d'erreur.\nDans cette section, vous allez découvrir les différentes catégories d'erreur et comment les corriger.\n\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "### SyntaxError - accents\n\nCette erreur survient lorsque vous utilisez des accents dans des noms de fonctions ou de variables.\n\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 5 </h3>Corrigez les trois erreurs de syntaxe'.\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "from turtle import *\n\ndef carré():\n for à in range(4):\n forward(100)\n left(90)\n\ncarré()\n\ndone()\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "### SyntaxError - parenthèses\n\nCette erreur survient lorsque vous oubliez de fermer une parenthèse.\n\n"
"source": "### TypeError\n\nCette erreur survient lorsque vous mettez des opérandes dont le type n'est pas approprié pour l'opérateur, par exemple une comparaison entre une chaîne et un entier.\n\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 8 </h3>Corrigez les trois erreurs de type.\n\n"
"source": "## Exercices\n\n- Téléchargez l'exercice\n- Lancez un éditeur externe (tel que Thonny)\n- Depuis l'éditeur ouvrez le fichier téléchargé\n- Remplacez ... par votre code\n- Déposez vos exercices sur Moodle\n\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "### Chatbot\n\nCréez un programme qui vous pose des questions\n\n- votre nom\n- votre âge\n- votre couleur préférée\n- votre groupe de musique préféré\n- votre classe\n- votre meilleur ami\n\nÀ chaque fois le chatbot mémorise votre réponse dans une variable qu'il utilise dans la phrase suivante.\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "print('Je suis un chatbot')\nprint('Quel est ton nom ?')\nnom = input()\nprint('Salut', nom)\n...\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "### Rectangle\n\nFaites un programme qui demande à l'utilisateur les côtés a et b d'un rectangle et calcule ensuite\n\nle périmètre\n\n$$ p = 2 (a+b) $$\n\nla surface\n\n$$ S = ab $$\n\net la diagonale\n\n$$ d = \\sqrt{a^2 + b^2} $$\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "print('Le rectangle')\n\na = float(input('Entrez la longueur a: '))\n...\n\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "### Cercle\n\nFaites un programme qui demande à l'utilisateur le rayon d'un cercle et calcule ensuite\n\nle diamètre\n\n$$ d = 2r $$\n\nla circonférence\n\n$$ c = 2 \\pi r $$\n\net la surface\n\n$$ S = \\pi r^2 $$\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "print('Le cercle')\n\nr = input('Entrez le rayon r: ')\n...\n\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "### Sphère\n\nFaites un programme qui demande à l'utilisateur le rayon d'une sphère et calcule ensuite\n\nle diamètre\n\n$$ d = 2r $$\n\nla surface\n\n$$ A = 4 \\pi r^2 $$\n\net le volume\n\n$$ V = \\frac{4 \\pi r^3}{3} $$\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "print('La sphère')\n\nr = input('Entrez le rayon r: ')\n...\n\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "### Quiz de multiplication\n\nCréez un quiz de multiplication.\n\n- Complétez pour avoir 10 questions\n- Corrigez les erreurs\n- Ajoutez le calcul du score\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "print('Quiz de multiplication')\nscore = 0\n\nfor (a, b) in ((4, 6), (5, 6)):\n print(a, '*', b, '=')\n reponse = int(input())\n if reponse == a * b:\n print('correct')\n else:\n print('FAUX. La bonne réponse est', a + b)\n print()\n\nprint('Votre score est')\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "### Quiz de vocabulaire\n\nCréez un quiz de vocabulaire français-anglais.\n\n- Complétez pour avoir 10 questions\n- Corrigez les erreurs\n- Ajoutez le calcul du score\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "print('Quiz de vocabulaire anglais')\nscore = 0\nquiz = (('ordinateur', 'computer'),\n ('clavier', 'keyboard'),\n ('souris', 'display'))\n\nfor (question, solution) in quiz:\n reponse = input(question + ': ')\n if reponse == solution:\n print('correct')\n else:\n print('FAUX. La bonne réponse est', question)\n print()\n\nprint('Votre score est')\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "### Quiz Kahoot\n\nLa plate-forme d'apprentissage ludique [Kahoot!](https://fr.wikipedia.org/wiki/Kahoot!) est utilisée comme technologie éducative dans les écoles et autres établissements d'enseignement.\n\nSes jeux d’apprentissage, *Kahoots*, sont des questionnaires à choix multiples qui permettent à plusieurs utilisateurs de jouer simultanément. Le site est accessible via un navigateur Web, mais aussi téléchargeable sur smartphone.\n\nCréez un quiz avec des questions sur un sujet de culture générale, dans le style des quiz sur le site Kahoot.\n\n- Complétez pour avoir 10 questions\n- Ajoutez le calcul du score\n\n"
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": "print('Quiz Kahoot Disney')\nprint()\nscore = 0\n\nquiz = ((\"Quel est le nom du cowboy dans Toy Story\", 'Woody'),\n (\"Comment s'appelle le garçon dont le nez grandit quand il ment\", 'Pinocchio'),\n (\"Quel est le nom de la fée dans Peter Pan\", 'Tinkerbell'))\n\n\nfor (question, solution) in quiz:\n print(question + '?')\n reponse = input()\n if reponse == solution:\n ...\n else:\n ...\n print()\n\nprint('Votre score est', ...)"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "---\n\n#### Remarque générale\n\nCe document est une adaptation d'un ressource pédagogique tiré du catalogue modulo https://modulo-info.ch/. Il est sous license Creative Commons [BY-NC-SA](https://creativecommons.org/licenses/?lang=fr)\n\n\n "
<p> Ce fichier est fait pour être lu sur le site <ahref="https://notebook.basthon.fr/"><imgsrc='https://notebook.basthon.fr/assets/efede5218c9087496f16.png'style="border: 0; display:inline; margin: 0 5px; height:30px"alt="Basthon"/></a>. <br>
Si vous l'avez ouvert avec un autre programme, comme Jupyter notebook, vous riquez de rencontrer quelques bugs. <br>
Veuillez cliquez sur <ahref="https://notebook.basthon.fr/">ce lien</a> et y charger ce fichier à l'aide du bouton "Ouvrir" <iclass="fa fa-folder"aria-hidden="true"></i>
</p></div>
%% Cell type:markdown id: tags:
# Questionner - `input()`
Dans ce chapitre, nous découvrons comment un programme peut poser une question lors de son exécution. L'utilisateur du programme peut alors répondre et entrer une information. La réponse sera stockée dans la mémoire de l'ordinateur et sera associée à une variable. Grâce à cette variable, le programme peut traiter la réponse fournie, et le résultat peut être affiché. Nous allons voir que :
- la fonction `input('question')` demande une information,
- une variable, par exemple `x`, mémorise une information,
- la fonction `print()` affiche un texte (une réponse).
%% Cell type:markdown id: tags:
## La fonction `input()`
La fonction `input('question')` permet de demander une entrée (input) à l'utilisateur.
L'utilisateur voit le texte `question` affiché à la console et doit répondre à cette question. Il termine son entrée avec la touche Enter.
La réponse de l'utilisateur est ensuite mémorisée dans une variable que nous appelons `x` dans cet exemple.
Ensuite, nous pouvons utiliser cette variable `x` dans la suite du programme, par exemple comme argument dans une fonction `print()`.
%% Cell type:code id: tags:
``` python
x=input('Entrez votre nom: ')
print('Bonjour',x)
```
%% Cell type:markdown id: tags:
## La fonction `print()`
La fonction `print()` peut accepter un ou plusieurs arguments, séparés par une virgule. Un espace est inséré à la place de la virgule.
Appeler la fonction `print()` sans argument, insère une ligne vide.
%% Cell type:code id: tags:
``` python
x=input('Entrez votre nom: ')
print()# sans argument - ligne vide
print('Hello')# un argument
print('Bonjour',x)# deux arguments
print(x,'comment vas-tu?')
print(x,'restera toujours',x)# trois arguments
print(x,'voit',x,'qui voit',x)# cinq arguments
```
%% Cell type:markdown id: tags:
## La variable
Une variable est une place en mémoire pour stocker de l'information.
Vous êtes complètement libres dans le choix des noms pour les variables, mais il est recommandé de choisir des noms qui sont le plus explicites possible. C'est mieux d'utiliser des noms de variable parlants, comme `nom` et `age`, même si on avait pu utiliser `x` et `y`.
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exercice 1 </h3>Ajoutez une troisième question et utilisez la réponse dans un `print()`.
%% Cell type:code id: tags:
``` python
nom=input('Entrez votre nom: ')
print('Bonjour',nom)
age=input('Entrez votre âge: ')
print('Très bien',nom,'vous avez',age,'ans')
```
%% Cell type:markdown id: tags:
## Demander un nombre
La fonction `input()` permet d'obtenir une entrée de l'utilisateur. Mais attention !
La valeur retournée est une chaine de caractères (de type string `str`). Nous pouvons le prouver avec la fonction `type()`.
%% Cell type:code id: tags:
``` python
x=input('Entrez un nombre: ')
print(type(x))
```
%% Cell type:markdown id: tags:
Pour pouvoir utiliser cette valeur dans un calcul, nous devons la transformer en nombre. Pour convertir une chaine de caractères en un nombre à virgule flottante nous utilisons la fonction de conversion `float()`.
%% Cell type:code id: tags:
``` python
x='1.5'
print(type(x))# la variable x contient une chaîne
print(type(float(x)))# la fonction float(x) renvoie un nombre
```
%% Cell type:markdown id: tags:
## Opérations de base
En Python, nous retrouvons les 4 opérations arithmétiques de base :
- addition (`+`)
- soustraction (`-`)
- multiplication (`*`)
- division (`/`)
%% Cell type:code id: tags:
``` python
print('Opérations de base')
a=float(input('Entrez un nombre: '))
b=float(input('Entrez un nombre: '))
print()
print('Addition ',a+b)
print('Soustraction ',a-b)
print('Multiplication',a*b)
print('Division ',a/b)
```
%% Cell type:markdown id: tags:
## Puissance
En Python l'opérateur de puissance est `**`. Ne le confondez pas avec le symbole `^` utilisé dans d'autres langages tel qu’Excel.
%% Cell type:code id: tags:
``` python
print('Puissance')
a=float(input('Entrez un nombre: '))
n=float(input('Entrez un exposant: '))
print()
print(a,'puissance',n,'=',a**n)
```
%% Cell type:markdown id: tags:
Nous pouvons utiliser une puissance de 0.5 pour calculer une racine.
%% Cell type:code id: tags:
``` python
print('Racine')
a=float(input('Entrez un nombre: '))
print('La racine de',a,'est',a**0.5)
```
%% Cell type:markdown id: tags:
Nous pouvons maintenant calculer une diagonale, en utilisant le théorème de Pythagore.
%% Cell type:code id: tags:
``` python
print('Pythagore')
a=float(input('Entrez un nombre a: '))
b=float(input('Entrez un nombre b: '))
print()
print('La diagonale est',(a**2+b**2)**0.5)
```
%% Cell type:markdown id: tags:
## Division entière
En Python, nous avons un opérateur spécial pour la division entière (`//`) ainsi que pour le reste de la division entière. L'opérateur pour le reste de la division entière est `%` est s'appelle **modulo**.
Cette fois-ci nous transformons la chaine pas en nombre à virgule flottante (`float`), mais en nombre enter (`int`).
Dans l'exemple suivant, on demande le rayon et on affiche rayon, diamètre et circonférence. Ajoutez la surface du cercle en utilisant la formule :
$$ S = \pi r^2 $$
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exercice 2 </h3>Complétez le programme pour afficher la surface du cercle.
%% Cell type:code id: tags:
``` python
print('Circle')
r=float(input('Entrez le rayon: '))
pi=3.14
print()
print('rayon =',r)
print('diamètre =',2*r)
print('circonférence =',pi*2*r)
print('surface =',...)
```
%% Cell type:markdown id: tags:
Nous pouvons également créer des programmes où nous demandons plusieurs valeurs à l'utilisateur. Cette fois, nous permettons seulement l'utilisation de nombres entiers, et donc transformons la chaine obtenue avec `int()` en nombre entier.
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exercice 3 </h3>Complétez le programme pour afficher le périmètre et la diagonale.
%% Cell type:code id: tags:
``` python
print('Rectangle')
a=float(input('Entrez la largeur: '))
b=float(input('Entrez la longueur: '))
print('surface =',a*b)
print('périmètre =',...)
print('diagonale =',...)
```
%% Cell type:markdown id: tags:
## Créer un quiz
Pour faire des petits quiz, nous créons des paires de mots qui vont ensemble. Par exemple pays et capitale dans un cours de géographie, ou une liste de vocabulaire en deux langues, pour un cours de langue.
%% Cell type:markdown id: tags:
### Séquence de questions
Nous mettons les deux valeurs `question` et `solution` dans un tuple et nous regroupons ces paires dans un deuxième tuple que nous appelons `quiz`
Quand nous parcourons `quiz` avec une boucle `for` nous pouvons utiliser une seule variable, par exemple `x` et lui affecter le tuple `(question, solution)`
Nous pouvons aussi parcourir le quiz avec un tuple de deux variables `(q, s)` et associer les deux valeurs séparément à chaque variable : donc
`q = question` et `s = solution`.
%% Cell type:code id: tags:
``` python
quiz=(('France','Paris'),
('Allemagne','Berlin'),
('Suisse','Berne'))
print('parcourir avec x')
forxinquiz:
print('x =',x)
print()
print('parcourir avec (q, s)')
for (q,s)inquiz:
print('q =',q,' s =',s)
```
%% Cell type:markdown id: tags:
### Poser une question
Nous pouvons maintenant extraire la question et la poser plusieurs fois dans une boucle `for`. Avec `input()` nous demandons la réponse. Nous séparons les questions avec un `print()` sans argument pour insérer une ligne vide entre les questions.
%% Cell type:code id: tags:
``` python
quiz=(('France','Paris'),
('Allemagne','Berlin'),
('Suisse','Berne'))
for (q,s)inquiz:
print('Quelle est la capitale de',q)
reponse=input('Votre réponse: ')
print()
```
%% Cell type:markdown id: tags:
### Evaluer une réponse
Nous introduisons ici déjà la structure `if-else` que nous allons voir en détail plus tard.
Le mot-clé `if` est suivi d'une condition. Ici nous comparons la réponse donnée par l'utilisateur avec la solution connue par le programme.
L'expression `reponse == solution` renvoie comme valeur `True` ou `False`. Selon cette valeur, un des deux blocs est exécuté.
%% Cell type:code id: tags:
``` python
quiz=(('France','Paris'),
('Allemagne','Berlin'),
('Suisse','Berne'))
for (question,solution)inquiz:
print('Quelle est la capitale de',question)
reponse=input('Votre réponse: ')
ifreponse==solution:
print('correct')
else:
print('FAUX! La bonne réponse est',solution)
print()
```
%% Cell type:markdown id: tags:
### Quiz avec score
Comment ajouter un score ?
Il faut ajouter 3 éléments de code pour:
- initialiser une variable au début
- augmenter la valeur avec chaque bonne réponse
- afficher le score à la fin
%% Cell type:code id: tags:
``` python
score=0# initialiser au début
print('avant',score)
score=score+1
print('après',score)
print('Votre score est',score)
```
%% Cell type:markdown id: tags:
Nous reprenons l'exemple du [chapitre précédent](prog1.randomiser) et nous ajoutons le calcul du score
%% Cell type:code id: tags:
``` python
score=0
quiz=(('France','Paris'),
('Allemagne','Berlin'),
('Suisse','Berne'))
for (question,solution)inquiz:
print('Quelle est la capitale de',question)
reponse=input('Votre réponse: ')
ifreponse==solution:
print('correct')
score=score+1
else:
print('FAUX! La bonne réponse est',solution)
print()
print('Votre score: ',score,'sur',len(quiz))
```
%% Cell type:markdown id: tags:
### Quiz mathématique
Nous utilisons un tuple avec deux valeurs (a, b) que nous mettons dans un deuxième tuple.
Cette fois nous avons pas besoin de donner une solution, car nous pouvons la calculer.
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exercice 4 </h3>Ajoutez le score pour ce quiz.
%% Cell type:code id: tags:
``` python
print('Quiz addition')
quiz=((12,35),(23,11),(55,23))
for (a,b)inquiz:
print(a,'+',b,'=')
reponse=int(input())
ifreponse==a+b:
print('correct')
else:
print('FAUX. La bonne réponse est',a+b)
print()
```
%% Cell type:markdown id: tags:
## Erreurs
Dans des chapitres précédents, nous avons déjà vu quelques messages d'erreurs. Mais il y en a d'autres que nous allons voir ici.
Il est important de bien comprendre les messages d'erreur.
Dans cette section, vous allez découvrir les différentes catégories d'erreur et comment les corriger.
%% Cell type:markdown id: tags:
### SyntaxError - accents
Cette erreur survient lorsque vous utilisez des accents dans des noms de fonctions ou de variables.
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exercice 5 </h3>Corrigez les trois erreurs de syntaxe'.
%% Cell type:code id: tags:
``` python
fromturtleimport*
defcarré():
foràinrange(4):
forward(100)
left(90)
carré()
done()
```
%% Cell type:markdown id: tags:
### SyntaxError - parenthèses
Cette erreur survient lorsque vous oubliez de fermer une parenthèse.
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exercice 6 </h3>Corrigez l'erreur de syntaxe.
%% Cell type:code id: tags:
``` python
fromturtleimport*
forward(100)
left(90)
forward(100
done()
```
%% Cell type:markdown id: tags:
### SyntaxError - ponctuation
Cette erreur survient lorsque vous oubliez un signe de ponctuation (parenthèse, virgule, apostrophe).
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exercice 7 </h3>Corrigez les trois erreurs de syntaxe.
%% Cell type:code id: tags:
``` python
print('hello'
print(1234)
print('bonjour)
```
%% Cell type:markdown id: tags:
### TypeError
Cette erreur survient lorsque vous mettez des opérandes dont le type n'est pas approprié pour l'opérateur, par exemple une comparaison entre une chaîne et un entier.
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exercice 8 </h3>Corrigez les trois erreurs de type.
%% Cell type:code id: tags:
``` python
print('10'>0)
print('10'*'10')
print('10'+10)
```
%% Cell type:markdown id: tags:
## Exercices
- Téléchargez l'exercice
- Lancez un éditeur externe (tel que Thonny)
- Depuis l'éditeur ouvrez le fichier téléchargé
- Remplacez ... par votre code
- Déposez vos exercices sur Moodle
%% Cell type:markdown id: tags:
### Chatbot
Créez un programme qui vous pose des questions
- votre nom
- votre âge
- votre couleur préférée
- votre groupe de musique préféré
- votre classe
- votre meilleur ami
À chaque fois le chatbot mémorise votre réponse dans une variable qu'il utilise dans la phrase suivante.
%% Cell type:code id: tags:
``` python
print('Je suis un chatbot')
print('Quel est ton nom ?')
nom=input()
print('Salut',nom)
...
```
%% Cell type:markdown id: tags:
### Rectangle
Faites un programme qui demande à l'utilisateur les côtés a et b d'un rectangle et calcule ensuite
le périmètre
$$ p = 2 (a+b) $$
la surface
$$ S = ab $$
et la diagonale
$$ d = \sqrt{a^2 + b^2} $$
%% Cell type:code id: tags:
``` python
print('Le rectangle')
a=float(input('Entrez la longueur a: '))
...
```
%% Cell type:markdown id: tags:
### Cercle
Faites un programme qui demande à l'utilisateur le rayon d'un cercle et calcule ensuite
le diamètre
$$ d = 2r $$
la circonférence
$$ c = 2 \pi r $$
et la surface
$$ S = \pi r^2 $$
%% Cell type:code id: tags:
``` python
print('Le cercle')
r=input('Entrez le rayon r: ')
...
```
%% Cell type:markdown id: tags:
### Sphère
Faites un programme qui demande à l'utilisateur le rayon d'une sphère et calcule ensuite
le diamètre
$$ d = 2r $$
la surface
$$ A = 4 \pi r^2 $$
et le volume
$$ V = \frac{4 \pi r^3}{3} $$
%% Cell type:code id: tags:
``` python
print('La sphère')
r=input('Entrez le rayon r: ')
...
```
%% Cell type:markdown id: tags:
### Quiz de multiplication
Créez un quiz de multiplication.
- Complétez pour avoir 10 questions
- Corrigez les erreurs
- Ajoutez le calcul du score
%% Cell type:code id: tags:
``` python
print('Quiz de multiplication')
score=0
for (a,b)in((4,6),(5,6)):
print(a,'*',b,'=')
reponse=int(input())
ifreponse==a*b:
print('correct')
else:
print('FAUX. La bonne réponse est',a+b)
print()
print('Votre score est')
```
%% Cell type:markdown id: tags:
### Quiz de vocabulaire
Créez un quiz de vocabulaire français-anglais.
- Complétez pour avoir 10 questions
- Corrigez les erreurs
- Ajoutez le calcul du score
%% Cell type:code id: tags:
``` python
print('Quiz de vocabulaire anglais')
score=0
quiz=(('ordinateur','computer'),
('clavier','keyboard'),
('souris','display'))
for (question,solution)inquiz:
reponse=input(question+': ')
ifreponse==solution:
print('correct')
else:
print('FAUX. La bonne réponse est',question)
print()
print('Votre score est')
```
%% Cell type:markdown id: tags:
### Quiz Kahoot
La plate-forme d'apprentissage ludique [Kahoot!](https://fr.wikipedia.org/wiki/Kahoot!) est utilisée comme technologie éducative dans les écoles et autres établissements d'enseignement.
Ses jeux d’apprentissage, *Kahoots*, sont des questionnaires à choix multiples qui permettent à plusieurs utilisateurs de jouer simultanément. Le site est accessible via un navigateur Web, mais aussi téléchargeable sur smartphone.
Créez un quiz avec des questions sur un sujet de culture générale, dans le style des quiz sur le site Kahoot.
- Complétez pour avoir 10 questions
- Ajoutez le calcul du score
%% Cell type:code id: tags:
``` python
print('Quiz Kahoot Disney')
print()
score=0
quiz=(("Quel est le nom du cowboy dans Toy Story",'Woody'),
("Comment s'appelle le garçon dont le nez grandit quand il ment",'Pinocchio'),
("Quel est le nom de la fée dans Peter Pan",'Tinkerbell'))
for (question,solution)inquiz:
print(question+'?')
reponse=input()
ifreponse==solution:
...
else:
...
print()
print('Votre score est',...)
```
%% Cell type:markdown id: tags:
---
#### Remarque générale
Ce document est une adaptation d'un ressource pédagogique tiré du catalogue modulo https://modulo-info.ch/. Il est sous license Creative Commons [BY-NC-SA](https://creativecommons.org/licenses/?lang=fr)