PYTHON ET MOI 1 Un premier exemple de programme

publicité
# 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.
Téléchargement