Chapitre 2 Devine mon nombre - · PDF filePython 3 : objectif jeux Chapitre 2 Chapitre 2 Devine mon nombre ! 2.1. Thèmes abordés dans ce chapitre • commentaires • modules externes,

Embed Size (px)

Citation preview

  • Python 3 : objectif jeux Chapitre 2

    Chapitre 2Devine mon nombre !

    2.1. Thmes abords dans ce chapitre commentaires modules externes, import variables boucle while condition : if... elif.... else la fonction de conversion int input() exceptions

    2.2. Rgles du jeuCe jeu est trs simple. L'ordinateur tire un nombre au hasard entre 1 et 30 et vous avez cinq essais

    pour le trouver. Aprs chaque tentative, l'ordinateur vous dira si le nombre que vous avez propos esttrop grand, trop petit, ou si vous avez trouv le bon nombre.

    Exemple de partieJ'ai choisi un nombre entre 1 et 30A vous de le deviner en 5 tentatives au maximum !Essai no 1Votre proposition : 15Trop petitEssai no 2Votre proposition : 22Trop grandEssai no 3Votre proposition : 17Trop grandEssai no 4Votre proposition : 16Bravo ! Vous avez trouv 16 en 4 essais

    Remarque : les nombres en gras ont t entrs au clavier par le joueur.

    Didier Mller 2-1 aot 2016

  • Devine mon nombre !

    devine.py

    http://ow.ly/bVSzK

    2.3. Code du programme# Devine mon nombre

    from random import randint

    nbr_essais_max = 5nbr_essais = 1borne_sup = 30mon_nombre = randint(1,borne_sup) # nombre choisi par l'ordinateurton_nombre = 0 # nombre propos par le joueur

    print("J'ai choisi un nombre entre 1 et",borne_sup)print("A vous de le deviner en",nbr_essais_max,"tentatives au maximum !")

    while ton_nombre != mon_nombre and nbr_essais mon_nombre: print("Trop grand") else: print("Bravo ! Vous avez trouv",mon_nombre,"en",nbr_essais,"essai(s)") nbr_essais += 1 if nbr_essais>nbr_essais_max and ton_nombre != mon_nombre : print("Dsol, vous avez utilis vos",nbr_essais_max,"essais en vain.") print("J'avais choisi le nombre",mon_nombre,".")

    2.4. Analyse du programmeReprenons ce programme ligne par ligne pour l'expliquer en dtails.

    2.4.1. Commentaires

    # Devine mon nombre

    Ceci est un commentaire. Les commentaires n'ont pas d'influence sur le programme lui-mme ;ils sont l pour aider la lecture et la comprhension du code.

    Rgle 1Le commentaire ne doit pas tre redondant avec le code. Inutile de commenter des choses

    videntes ! D'une manire gnrale, mieux le code est crit, moins il y aura besoin de commentaires.

    Rgle 2Pour dterminer ce qu'il faut indiquer dans le commentaire, se poser la question pourquoi ? et

    non pas comment ? . En effet, on arrivera souvent comprendre ce que fait une fonction sanscommentaires, mais on ne verra pas toujours son utilit.

    2.4.2. Variablesnbr_essais_max = 5nbr_essais = 1borne_sup = 30mon_nombre = randint(1,borne_sup) # nombre choisi par l'ordinateurton_nombre = 0 # nombre propos par le joueur

    Nous avons ici cinq variables qu'il faut initialiser. Cela signifie qu'il faut leur donner une valeurde dpart. Si on ne le fait pas, l'interprteur Python va envoyer le message d'erreur du genre :

    NameError: name 'nbr_essais_max' is not defined

    Didier Mller 2-2 aot 2016

    http://ow.ly/bVSzK

  • Python 3 : objectif jeux Chapitre 2

    C'est au moment o l'on initialise une variable que l'interprteur Pythonla cre. On peut voir une variable comme une bote qui va contenir unevaleur : ce peut tre un nombre, une chane de caractres, une liste, etc.crire nbr_essais = 1 a pour effet de dposer dans cette bote la valeurentire 1. On ne pourra pas mettre autre chose que des nombres entiers danscette variable par la suite.

    Dans la variable mon_nombre va tre stocke une valeur alatoire entire, qui changera chaqueexcution du programme. Il est noter que si l'on avait omis la ligne

    from random import randint

    l'interprteur Python aurait crit le message d'erreur : NameError: name 'randint' is not defined

    print("J'ai choisi un nombre entre 1 et",borne_sup)print("A vous de le deviner en",nbr_essais_max,"tentatives au maximum !")

    Ces deux lignes crivent l'cran le texte entre guillemets, ainsi que les valeurs contenues dansles variables borne_sup et nbr_essais_max. En l'occurrence, on verra s'crire sur l'cran :

    J'ai choisi un nombre entre 1 et 30A vous de le deviner en 5 tentatives au maximum !

    Rgles pour les noms des variablesLe nom d'une variable est compos des lettres de a z, de A Z, et des chiffres 0 9, mais il ne

    doit pas commencer par un chiffre. Les lettres accentues, les cdilles, les espaces, les caractres spciaux tels que $, #, @, etc. sont

    interdits, l'exception du caractre _ (soulign). Le tiret (-) est bien sr interdit puisqu'il correspondaussi la soustraction.

    La casse est significative : spam et Spam sont des variables diffrentes !Python compte 33 mots rservs qui ne peuvent pas non plus tre utiliss comme noms de

    variable (ils sont utiliss par le langage lui-mme) :

    and as assert break class continue defdel elif else except False finally forfrom global if import in is lambdaNone nonlocal not or pass raise returnTrue try while with yield

    Prenez l'habitude d'crire l'essentiel desnoms de variables en caractres minus-cules (y compris la premire lettre). Ils'agit d'une convention largementrespecte. N'utilisez les majuscules ou lessouligns qu' l'intrieur du nom, pour enaugmenter la lisibilit. Par exemple :finDeMot ou fin_de_mot.

    Utilisez des noms de variable qui ontun sens afin d'augmenter la compr-hension du programme. Cela vous viterad'ajouter des commentaires pour expliquerl'utilit de ces variables.

    Didier Mller 2-3 aot 2016

  • Devine mon nombre !

    Les priorits sont les mmes que sur une calculatrice standard. On peut utiliser des parenthses pour changer les priorits.

    AffectationsEn Python, on peut assigner une valeur plusieurs variables simultanment. Exemple :

    a = b = 3

    On peut aussi effectuer des affectations parallles l'aide d'un seul oprateur :

    a, b = 3, 2.54

    Dans cet exemple, les variables a et b prennent simultanment les nouvelles valeurs 3 et 2.54.Cela est particulirement utile quand on veut changer les valeurs de deux variables. Il suffitd'crire :

    a, b = b, a

    Comme les affectations sont simultanes, les nouvelles valeurs de a et b seront respectivement2.54 et 3.

    Notons enfin au passage qu'une instruction du type :

    a + 1 = 3

    est tout fait illgale !

    Oprations sur les variables entiresDans notre programme, toutes les variables sont du type entier. Les oprations que l'on peut faire

    avec les entiers sont les suivantes :

    Symbole Nom Exemple Rsultat

    + Addition 3+4 7

    - Soustraction 8-3 5

    * Multiplication 5*2 10

    // Division entire 14//3 4

    % Reste de la division entire 14%3 2

    / Division 14/3 4.666...

    ** lvation la puissance 3**4 81

    Tableau 2.1: oprateurs sur les nombres entiers

    En informatique, on dit indent plutt que dcal droite.

    2.4.3. Boucle while (tant que)while ton_nombre != mon_nombre and nbr_essais mon_nombre: print("Trop grand") else: print("Bravo ! Vous avez trouv",mon_nombre,"en",nbr_essais,"essai(s)") nbr_essais += 1

    Voici une boucle Tant que. Tant que la valeur stocke dans nom_nombre sera diffrente de lavaleur stocke dans ton_nombre et que le nombre d'essais effectus sera infrieur ou gal aunombre d'essais maximum, alors toute la partie du code qui est indente vers la droite sera excuteen boucle.

    Didier Mller 2-4 aot 2016

  • Python 3 : objectif jeux Chapitre 2

    Symbole Nom Exemple Rsultat

    == gal 3 == 3 True

    != diffrent 3 != 4 True

    > suprieur 5 > 5 False

    >= suprieur ou gal 5 >= 5 True

    < infrieur 6 < 2 False

  • Devine mon nombre !

    h=0while h

  • Python 3 : objectif jeux Chapitre 2

    Exemple d'une partienombre maximum ? 156 x 12 = 7214 x 7 = 988 x 9 = 725 x 12 = 6013 x 14 = 183Faux ! Ressayez !13 x 14 = 192Faux ! Ressayez !13 x 14 = 1824 x 5 = 209 x 7 = 638 x 8 = 6412 x 14 = 16810 x 12 = 120

    2.4.7. Conditions if ton_nombre < mon_nombre: print("Trop petit") elif ton_nombre > mon_nombre: print("Trop grand") else: print("Bravo ! Vous avez trouv",mon_nombre,"en",nbr_essais,"essais")

    Quand le joueur propose un nombre, il y a trois possibilits : soit son nombre est trop petit, soit ilest trop grand, soit c'est le bon nombre. Ces trois possibilits correspondront trois rponsesdiffrentes de l'ordinateur.

    Cela se traduira en Python par l'utilisation des instructions if... elif... else... On auraitpu crire plusieurs instructions au lieu d'une. Il aurait suffi de garder le mme dcalage. Parexemple :

    if ton_nombre < mon_nombre: print("Trop petit") print("Dommage!")

    Exercice 2.5 : livret sous pression du tempsAmliorez le programme de l'exercice 2.4 : la fin de la partie, affichez le nombre d'erreurs (avec

    la bonne orthographe) et le temps utilis pour rpondre aux dix questions.

    Aide : dans le module time se trouve la fonction time(), qui donne le nombre de secondescoules depuis le 1er janvier 1970 00:00:00.

    Exercice 2.6 : calcul mentalAmliorez le programme de l'exercice 2.5. Cette fois-ci, on ne veut pas se contenter d'exercer les

    multiplications, mais aussi l'addition, la soustraction et la division entire. L'opration tester seratire au sort pour chaque question.

    Exercice 2.7crivez un programme qui simule 1000 lancers d'une pice de monnaie. Vous afficherez

    seulement le nombre de piles et le nombre de faces obtenus.crivez une version avec une boucle for (voir chapitre 1) et une autre avec une boucle while.

    Didier Mller 2-7 aot 2016

  • Devine mon nombre !

    Exercice 2.8 : les paquets de cartes HearthstoneAmli