cClaude.rocks ☕ Le blog

[Nouvelles technologies du libre, sciences et coups de gueule…]

Menu

Ce billet fait partie d’une sĂ©rie de billets : #atelier-python.

Merci de laisser un commentaire si vous avez essayé ou fini cet atelier. Le commentaire sera publié que si vous en faite la demande.

RĂšgles du jeu

On va commencer par un jeu trùs simple. L’ordinateur tire un nombre entier au hasard entre 1 et 100 et vous avez 7 essais pour le trouver.

AprĂšs chaque tentative, l’ordinateur vous dira si le nombre que vous avez proposĂ© est trop petit, trop grand, ou si vous avez trouvĂ© le bon nombre.


ඏ

Introduction de la notion de commentaire

Pour aider Ă  la comprĂ©hension du code, il est nĂ©cessaire d’expliquer ce qui est fait. Voici comment vous pouvez commencer votre code :

# Jeu du nombre mystĂšre

Cette ligne est un commentaire. Les commentaires n’ont pas d’influence sur le programme lui-mĂȘme ; ils sont lĂ  pour aider Ă  la lecture et Ă  la comprĂ©hension du code.

RĂšgles de base pour les commentaires

  • Un commentaire ne doit pas ĂȘtre redondant avec le code. Il n’est pas nĂ©cessaire de commenter des choses Ă©videntes ! D’une maniĂšre gĂ©nĂ©rale, mieux le code est Ă©crit, moins il y aura besoin de commentaires.
  • Pour dĂ©terminer 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 sans commentaires, mais on ne verra pas toujours son utilitĂ©.

ඏ

Introduction de la notion de bibliothĂšque

Comme souvent dans les jeux, nous allons avoir besoin d’un gĂ©nĂ©rateur de nombre alĂ©atoire. Ici, il s’agira d’initialiser la variable contenant le nombre Ă  rechercher.

Comme la plupart des langages, Python propose un certain nombre de bibliothĂšques standards qui propose des outils communs pour manipuler diffĂ©rents types d’objets. Par exemple, ici on ajoutera Ă  nombre programme qui sait gĂ©rer les nombres alĂ©atoires.

from random import randint

Dans notre cas, on importera qu’une seule fonction : randint et on prĂ©cise dans quelle bibliothĂšque cette fonction se trouve : random.

Notez : qu’il est possible de crĂ©er votre propre bibliothĂšque de fonctions, en Python on utilise dans ce cas plutĂŽt le terme : module.


ඏ

Les variables

Nous allons identifier les variables nécessaires à ce jeu.

D’abord il va falloir stocker le nombre mystùre, on utilisera pour cela une variable que l’on nommera par exemple : nombre_secret.

Le nombre secret devra ĂȘtre comparĂ© Ă  la proposition du joueur (variable nombre) et il sera Ă©galement nĂ©cessaire de compter le nombre de coups jouĂ©s que le mĂ©morisera dans : nbr_essais

Ce sont les 3 variables indispensables au jeu.

Pour initialiser la variable nombre_secret, on utilisera la fonction importée randint comme suit :

nombre_secret = randint(1,100)

La fonction random.randint()

La librairie random propose une série de fonctions qui implémentent des générateurs de nombres pseudo-aléatoires. Ce type de fonctionnalité produit généralement des nombres compris entre 0 et 1, et donc un nombre à virgule.

Si l’on souhaite travailler avec des nombres entiers, il faut utiliser la fonction suivante : random.randint() qui accepte deux nombre comme arguments, a et b, et retourne un nombre entier de l’intervalle compris entre a et b [a;b]. La syntaxe sera : random.randint(a, b). La commande from L import F permet d’éviter de prĂ©fixer la fonction, d’oĂč l’écriture :

nombre_secret = randint(1,100)

Nous venons de voir que 3 variables sont indispensables Ă  la rĂ©alisation de ce programme, cependant pour des raisons de lisibilitĂ©s, mais Ă©galement pour des raisons de paramĂ©trage de notre jeu, nous en utiliserons d’autres :

  • Le nombre d’essais maximum sera stockĂ© dans nbr_essais_max.
  • La borne haute du nombre secret sera elle aussi mise dans une variable, permettant de paramĂ©trer le jeu : nombre_secret_max. Du coup, l’initialisation de nombre_secret se fera comme suit :
nombre_secret = randint(1,nombre_secret_max)    # nombre choisi par l’ordinateur

RĂšgles pour les noms des variables

  • Le 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 accentuĂ©es, les cĂ©dilles, les espaces, les caractĂšres spĂ©ciaux tels que $, #, @, etc. sont interdits, Ă  l’exception du caractĂšre _ (soulignĂ©). Le tiret - est Ă©galement interdit puisqu’il correspond aussi Ă  la soustraction.
  • La casse est significative : nombre et Nombre sont des variables diffĂ©rentes !
  • Prenez l’habitude d’écrire l’essentiel des noms de variables en caractĂšres minuscules (y compris la premiĂšre lettre). Il s’agit d’une convention largement respectĂ©e.
  • N’utilisez les majuscules ou les soulignĂ©s qu’à l’intĂ©rieur du nom, pour en augmenter la lisibilitĂ©. Par exemple : nombreSecretMax ou nombre_secret_max.
  • Utilisez des noms de variable qui ont un sens afin d’augmenter la comprĂ©hension du programme. Cela vous Ă©vitera d’ajouter des commentaires pour expliquer l’utilitĂ© de ces variables.
  • Python compte 33 mots rĂ©servĂ©s qui ne peuvent pas non plus ĂȘtre utilisĂ©s comme noms de variable (ils sont utilisĂ©s par le langage lui-mĂȘme) :
and as assert break class continue
def del elif else except False
finally for from global if import
in is lambda None nonlocal not
or pass raise return True try
while with yield      

ඏ

TP : Écrire l’initialisation du jeu

Ouvrez votre Ă©diteur Python (Thonny par exemple) et Ă©crivez le dĂ©but du programme qui contient l’initialisation des variables.

Il y a cinq variables que vous devez initialiser. Cela signifie qu’il faut leur donner une valeur de dĂ©part. Si on ne le fait pas, l’interprĂ©teur Python va envoyer le message d’erreur du genre : NameError: name 'nbr_essais_max' is not defined

Typage fort

C’est au moment oĂč l’on initialise une variable que l’interprĂ©teur Python la crĂ©e. On peut voir une variable comme une boĂźte qui va contenir une valeur : ce peut ĂȘtre un nombre, une chaĂźne de caractĂšres, une liste, etc.

La ligne suivant a pour effet de déposer dans cette boßte la valeur entiÚre 1.

nbr_essais = 1

Python est un langage avec un typage fort, cela signifie qu’on ne pourra pas mettre autre chose que des nombres entiers dans cette variable par la suite.

Pensez Ă©galement aux commentaires.

  • Solution
    nbr_essais_max = 7
    nbr_essais = 1
    nombre_secret_max = 100
    nombre_secret = randint(1,nombre_secret_max)    # nombre choisi par l’ordinateur
    nombre = 0                                      # nombre proposé par le joueur
    

ඏ

Affichage initial du jeu.

Aprùs l’initialisation, on va afficher les rùgles du jeu, on souhaite obtenir quelque chose comme ça :

J’ai choisi un nombre entre 1 et 100
Devine le en 7 tentatives au maximum !
  • Solution
    print("J’ai choisi un nombre entre 1 et",nombre_secret_max)
    print("Devine le en",nbr_essais_max,"tentatives au maximum !")
    

    Pensez Ă  utiliser les variables et non leur valeur.


ඏ

Corps du jeu

Voici la trace de ce que pourrait-ĂȘtre une partie gagnante :

J’ai choisi un nombre entre 1 et 100
Devine le en 7 tentatives au maximum !
Essai numéro : 1
Ta proposition : 50
Trop grand
Essai numéro : 2
Ta proposition : 25
Trop grand
Essai numéro : 3
Ta proposition : 12
Bravo ! Tu as trouvé 12 en 3 essai(s)

Et voici la trace d’une partie oĂč le joueur perd :

J’ai choisi un nombre entre 1 et 100
Devine le en 7 tentatives au maximum !
Essai numéro : 1
Ta proposition : 1
Trop petit
Essai numéro : 2
Ta proposition : 2
Trop petit
Essai numéro : 3
Ta proposition : 3
Trop petit
Essai numéro : 4
Ta proposition : 4
Trop petit
Essai numéro : 5
Ta proposition : 5
Trop petit
Essai numéro : 6
Ta proposition : 7
Trop petit
Essai numéro : 7
Ta proposition : 8
Trop petit
Désolé, Tu as utilisé 7 essais en vain.
Le nombre secret était : 60 .
  • Le corps du jeu commencera par une boucle qui testera deux conditions, pour cela nous utiliseront l’opĂ©rateur and. On devra Ă©crire quelque chose comme :
while PREMIER_TEST and SECOND_TEST:

L’une des conditions s’assure que le nombre secret n’a pas Ă©tĂ© trouvĂ©, l’autre devant vĂ©rifier que le nombre d’essais reste infĂ©rieur ou Ă©gale au nombre d’essais maximum autorisĂ©s.

  • La saisie du nombre proposĂ© par le joueur se fait Ă  l’aide de :
nombre = int(input("Ta proposition : "))

En effet, input() retourne une chaĂźne de caractĂšre qui doit ĂȘtre convertie en entier. Cela se fait Ă  l’aide de int().

  • À chaque « tour » de boucle, le contenu de la variable nbr_essais doit ĂȘtre incrĂ©mentĂ©. On doit prendre le contenu de nbr_essais et lui ajouter la valeur 1: nbr_essais + 1.

On met ce rĂ©sultat dans nbr_essais + 1, tout cela s’écrit :

nbr_essais = nbr_essais + 1

que l’on peut simplifier Ă  l’aide de l’opĂ©rateur += comme suit :

nbr_essais += 1

On favorisera cette seconde Ă©criture autant que possible.


ඏ

TP : Écrire le jeu complet

Vous avez maintenant tous les Ă©lĂ©ments nĂ©cessaires Ă  l’écriture de ce jeu.

Faite attention à l’indentation.

  • Solution
    # Jeu du nombre mystĂšre
    
    from random import randint
    
    nbr_essais_max = 7
    nbr_essais = 1
    nombre_secret_max = 100
    nombre_secret = randint(1,nombre_secret_max)    # nombre choisi par l’ordinateur
    nombre = 0                                      # nombre proposé par le joueur
    
    print("J’ai choisi un nombre entre 1 et",nombre_secret_max)
    print("Devine le en",nbr_essais_max,"tentatives au maximum !")
    
    while nombre != nombre_secret and nbr_essais <= nbr_essais_max:
        print("Essai numéro :",nbr_essais)
        nombre = int(input("Ta proposition : "))
        if nombre < nombre_secret:
            print("Trop petit")
        elif nombre > nombre_secret:
            print("Trop grand")
        else:
            print("Bravo ! Tu as trouvé",nombre_secret,"en",nbr_essais,"essai(s)")
        nbr_essais += 1
    
    if nbr_essais > nbr_essais_max and nombre != nombre_secret :
      print("Désolé, Tu as utilisé",nbr_essais_max,"essais en vain.")
      print("Le nombre secret était :",nombre_secret,".")
    

ඏ

Liens

኿


â„č 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog