Université Bordeaux 2 Licence 1er semestre (2007/2008) Algorithmes et structures de données : TD 8 (sur machine) corrigé Entrée de l’utilisateur - chaı̂nes de caractères - listes - nombres aléatoires Pour utiliser des nombres aléatoires, vous devez importer la bibliothèque random une fois, en tout début du programme ! import random #... a = random.randint(1,6) # un nombre aléatoirea entre 1 et 6 Exercice 8.1 Répertoires de travail 1. Ouvrir un Explorateur Windows (soit par combinaison touche <Windows> - e, ou bien Démarrer - Programmes - Accessoires - Explorateur Windows. 2. Sélectionner le lecteur logique Z. Dans ce lecteur, créer un répertoire (dossier) s’appelant ASD. Choisisser le répertoire ASD comme répertoire courant, et dans ce répertoire, créer un autre répertoire s’appelant TD8. Exercice 8.2 Entrée du clavier 1. Ecrire un programme en python qui demande à l’utilisateur son prénom, et qui affiche un texte de bienvenu personnalisé (par exemple, Bonjour Anna). 2. Afficher à l’écran le nombre de caractères dans le prénom renseigné. print "Entrez votre prénom : ", prenom = raw_input(); print "Bonjour ",prenom print nombre = len(prenom) print "Votre prénom a ", nombre, " caractères." Exercice 8.3 Listes et nombre aléatoires I 1. Ecrire un programme en python qui génère un nombre entier aléatoire entre 0 et 6. import random aleatoire = random.randint(0,6) print "Le nombre aléatoire est ",aleatoire 2. Ecrire un programme en python qui génère un jour de semaine aléatoire (lundi, mardi, ..). import random aleatoire = random.randint(0,6) print "Le nombre aléatoire est ",aleatoire jourDeLaSemaine = ["lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"] jourAleatoire = jourDeLaSemaine[aleatoire] print "Un jour de semaine aléatoire :",jourAleatoire Exercice 8.4 Listes et nombre aléatoires II 1. de 2. 3. Ecrire un programme en python qui simule une lancée d’un jeu de 5 dés (donc une liste 5 éléments de nombres aléatoires entre 1 et 6). Afficher la lancée des 5 dés Déterminer le dé avec la plus grand valeur. import random lancee = [0,0,0,0,0] i = 0 while (i<5): des = random.randint(1,6) lancee[i] = des i = i + 1 print "La lancée est ", lancee plusGrandeValeur = 0 plusGrandDe = 0 i = 0 while (i<5): if lancee[i] > plusGrandeValeur: plusGrandeValeur = lancee[i] plusGrandDe = i i = i + 1 print "Le dé numéro ",plusGrandDe," porte la plus grande valeur : ",plusGrandeValeur 2 Exercice 8.5 Jeu de nombres aléatoires Dans cet exercice, utiliser input au lieu de raw input pour les entrées d’utilisateur, car il s’agit de nombre entiers. 1. Ecrire un programme en python qui génère deux nombres entiers aléatoires entre 1 et 100, un pour l’ordinateur, stocké dans la variable ordinateur, et un pour le joueur, stocké dans la variable joueur. Afficher les nombres aléatoires pour l’ordinateur, et pour le joueur. Le gagnant du jeu est celui avec le plus grand nombre. Déterminer et afficher le gagnant ! nombreOrdinateur = random.randint(1,100) nombreJoueur = random.randint(1,100) print "le nombre de l’ordinateur :",nombreOrdinateur print "le nombre du joueur :",nombreJoueur if (nombreOrdinateur > nombreJoueur): print "L’ordinateur a gagné !" elif (nombreOrdinateur < nombreJoueur): print "Le joueur a gagné !" else: print "Egalité !" 2. A la fin du jeu, demander à l’utilisateur s’il veut rejouer (Utiliser une boucle qui imbrique le jeu entier !). import random rejouer = "o" while rejouer == "o": nombreOrdinateur = random.randint(1,100) nombreJoueur = random.randint(1,100) print "le nombre de l’ordinateur :",nombreOrdinateur print "le nombre du joueur :",nombreJoueur if (nombreOrdinateur > nombreJoueur): print "L’ordinateur a gagné !" elif (nombreOrdinateur < nombreJoueur): print "Le joueur a gagné !" else: print "Egalité !" print "Voulez-vous rejouer (o/n) ?" rejouer = raw_input() print "au revoir!" Exercice 8.6 Devinette Dans cet exercice, utiliser input au lieu de raw input pour les entrées d’utilisateur, car il s’agit de nombre entiers. 3 1. Ecrire un programme en python qui génère un nombre entier aléatoire entre 1 et 20, et stocker le dans la variable solution. Demander à l’utilisateur de deviner le nombre aléatoire jusqu’à il le trouve. Compter le nombre d’essais que l’utilisateur a eu besoin. A la fin du programme, afficher le texte ”Félicitations”, suivi par le nombre d’essais. import random essai = 0 deviner = 0 nombre = random.randint(1,20) while deviner != nombre: print "Entrer un nombre :" deviner = input() essai = essai + 1 print "Félicitations ! Vous avez trouvé le nombre en ",essai," essais" 2. Modifier le devinette de l’exercice précédent pour qu’après chaque essai mauvais du joueur, le programme renseigne le joueur si le nombre à trouver est plus grand (”le nombre est plus grand”), ou si le nombre à trouver est plus petit (”le nombre est plus petit”). Comme dans l’exercice précédent, afficher le texte ”Félicitations”, suivi par le nombre d’essais. import random essai = 0 deviner = 0 nombre = random.randint(1,20) while deviner != nombre: print "Entrer un nombre :" deviner = input() if (deviner > nombre): print "le nombre est plus petit" elif (deviner < nombre): print "le nombre est plus grand" essai = essai + 1 print "Félicitations ! Vous avez trouvé le nombre en ",essai," essais" 3. Laquelle des exercice précédent permet à l’utilisateur de trouver le nombre en moins d’essais ? La deuxième, bien sûr 4. Combien d’essai faut-il au pire dans l’execice 1 et dans l’exercice 2, respectivement, en appliquant une bonne stratégie. 5. Pour un nombre entier aléatoire entre 1 et n, quel est l’espérance pour le nombre d’essais dans l’exercice 1 ? Quel est l’espérance pour l’exercice 2 en appliquant une bonne stratégie ? Exercice 8.7 TD précédents 4 1. Pour un contrôle de connaissances, traduire les algorithmes de tous les séances TD précédentes en python ! 5