# On charge, dans un premier temps, les bibliothèques dont on va avoir besoin # chargement des fonctions seed et randint du module random from random import seed,randint # le jeu du plus-moins """ Mise en oeuvre du jeu du plus-moins L’utilisateur doit deviner le nombre entre 1 et 100 choisi par l’ordinateur """ seed() # initialisation du générateur pseudo-aléatoire inconnue=randint(1,100) # Début du jeu b=int(input("Devinez le nombre entre 1 et 100 choisi \n")) # Le jeu se poursuit tant que le nombre n’est pas trouvé while b != inconnue : if b < inconnue : b=int(input("Pas de chance ! Le nombre à trouver est plus grand ...\n Choisissez un nombre plus grand : ")) else : b=int(input("Pas de chance ! Le nombre à trouver est plus petit ...\n Choisissez un nombre plus petit : ")) # Lorsque le bon nombre est trouvé, c’est gagné ! print("Bingo ! Le nombre à deviner était bien ",inconnue) Voici un programme écrit en langage Python : PYTHON ET MOI • Pour sauvegarder ce programme Le nom du fichier doit se terminer par l’extension .py • Pour exécuter ce programme Depuis la fenêtre dans laquelle se trouve le programme : Run −→ Run Module 3. Taper le programme précédent. 2. Ouvrir une nouvelle fenêtre : File −→ New Window 1. Lancer IDLE. TP 1 2. Modifier le programme précédent pour qu’il affiche, en fin de partie, le nombre de coups joués. 1. Modifier le programme précédent pour que, lorsque le joueur propose un nombre n tel que |n−inconnue| ≤ 5, on lui précise qu’il est proche de inconnue, tandis que, si |n−inconnue| ≥ 25, on lui indique qu’il en est loin. Et si on apportait des modifications ? 2. A l’issue de certaines instructions telles que while b != inconnue : ou if b < inconnue : , lors du retour à la ligne, un alinéa est automatiquement inséré avant la saisie du code de la ligne suivante. On parle alors d’indentation. On peut voir cet aspect de mise en forme comme une aide pour mieux structurer les instructions : par exemple, on voit clairement où se termine l’instruction conditionnelle if. En Python, cet alinéa prend une importance qui va au-delà de la "simple" mise en forme : l’oubli d’une indentation peut engendrer des messages d’erreur. On dit que l’indentation est signifiante. Un programme écrit en Python peut manquer de clarté sous sa forme "brute" : il ne faudra donc pas hésiter à écrire de nombreux commentaires, qui permettront d’y voir plus clair dans le rôle des lignes du code. 1. Sur certaines lignes apparaissent des explications précédées de # : il s’agit de commentaires, qui ne sont pas interprétés par la machine au moment de l’exécution du programme, et qui servent à indiquer à la personne qui lit le code à quoi sert telle ou telle instruction. La chaîne de caractères : """ Mise en oeuvre du jeu du plus-moins L’utilisateur doit deviner le nombre entre 1 et 100 choisi par l’ordinateur """ joue également ce rôle. Remarque : La mise en forme de ce programme avec IDLE possède quelques caractéristiques notables je veux maîtriser Python avec les mains Un premier exemple de programme ,→ A vous de jouer ! • Pour saisir ce programme 1 Informatique Remarques : 1. Si les instructions sont, en grande partie, les mêmes que dans le précédent programme, la mise en forme est différente : on propose ici une fonction, qui retourne un résultat (la durée du jeu). On remarque que les instructions qui suivent la première ligne – qui permet de définir la fonction jeu – sont toutes indentées. ,→ Comment utiliser cette fonction ? Une fois cette fonction écrite dans le shell d’IDLE, il suffit d’exécuter la commande jeu(n), où n est un entier que l’on choisira. # chargement des fonctions seed et randint du module random from random import seed,randint # chargement de la fonction time permettant de mesurer le temps from time import time def jeu(n) : """L’utilisateur propose un entier n, puis doit deviner le nombre entre 1 et n choisi par l’ordinateur ; la fonction retournera alors la durée de la partie.""" seed() # initialisation du générateur pseudo-aléatoire inconnue=randint(1,n) # On relève l’instant de début de partie debut=time() # Début du jeu b=int(input("Devinez le nombre entre 1 et l’entier que vous avez proposé \n ") # Le jeu se poursuit tant que le nombre n’est pas trouvé while b != inconnue : if b < inconnue : b=int(input("Pas de chance ! Le nombre à trouver est plus grand ...\n Choisissez un nombre plus grand : ")) else : b=int(input("Pas de chance ! Le nombre à trouver est plus petit ...\n Choisissez un nombre plus petit : ")) # Lorsque le bon nombre est trouvé, c’est gagné ! print("Bingo ! Le nombre à deviner était bien ",inconnue) # On relève l’instant de fin de partie fin=time() # La fonction retourne alors la durée de la partie return fin-debut Voici à présent le code permettant de déclarer une fonction, dont les instructions reprennent en grande partie celles du programme précédent. Et pour quelques dollars de plus... 3. On cherche à calculer la moyenne d’une liste de réels, chacun devant être pondéré par un coefficient donné. Pour cela, on regroupe les réels dans une liste L et les coefficients dans une liste C, les listes L et C ayant le même nombre d’éléments. Ecrire une fonction moyenne3 ayant pour paramètres deux listes L et C de même longueur contenant des réels (ceux de C étant tous strictement positifs), et retournant la moyenne arithmétique des réels figurant dans la liste L pondérés par les coefficients de la liste C, comme indiqué précédemment. 1. Ecrire une fonction moyenne1 ayant pour paramètre trois réels x, y et z donnés, et retournant la moyenne arithmétique de ces trois réels. 2. Ecrire une fonction moyenne2 ayant pour paramètre une liste L contenant des réels, et retournant la moyenne arithmétique des réels figurant dans cette liste. Pour cela, on n’oubliera pas que les éléments d’une liste L de longueur n sont nommés L[0], L[1], ..., L[n-1]. En outre, la syntaxe for i in range(n) : pourra être utile. Quelques petites fonctions autour de la moyenne Ecrire une fonction ayant pour paramètre un nombre entier entre 1 et 100, programmant la recherche de ce nombre par l’ordinateur, et retournant le nombre de coups joués par l’ordinateur pour trouver le nombre. 1. Modifier le premier programme pour qu’il affiche, en fin de partie, la durée moyenne d’un coup du joueur. 2. Modifier le premier programme pour qu’il affiche, en fin de partie, la liste des nombres proposés par le joueur. On pourra commencer par regarder les effets, sur la variable L, de la succession d’instructions : L=[], L=L+[3.0], L=L+[-7]... 3. Modifier le programme précédent pour qu’il affiche, en fin de partie, la moyenne des nombres proposés par le joueur. Et pour les plus rapides... 3 2 Ici, la première ligne de commentaire, qui apparaît après la déclaration de la fonction def jeu(n) : joue un rôle remarquable. En effet, le texte qui y figure est écrit à l’utilisateur lorsqu’il demande l’aide à propos de la fonction jeu, via la commande help(jeu). 2. Comme lors de l’écriture d’un programme, des commentaires peuvent figurer au niveau de chaque ligne où on l’estime utile.