Informatique - T.P. n◦ 5 Claude Bernard 2013-2014 Listes et boucles (II) Le but de ce T.P. est de mettre en œuvre les algorithmes classiques sur les listes : recherche du maximum, position d’un maximum, recherche d’un élément etc. Créer un dossier TP5. Pour chaque exercice, créer un nouveau fichier. 1 Maximum d’une liste non vide Écrire une fonction maxi déterminant le maximum d’une liste non vide. La fonction maxi prend un unique argument, une liste L non vide d’entiers, et renvoie un entier, le maximum de la liste L. Il est naturellement exclu d’utiliser une fonction intégrée de python. Informatique - T.P. n◦ 5 Claude Bernard 2013-2014 Variante En s’inspirant de la fonction pos_max, écrire une fonction pos_max_2 qui détermine l’indice du maximum en renvoyant le plus grand indice si plusieurs éléments correspondent au maximum. (Il suffit probablement de changer un unique caractère.) Exemple >>> pos_max_2([3, 4, 122, -66, 122, 33, 44]) 4 3 Nombre d’apparitions Écrire une fonction compter prenant deux paramètres (une liste L et une valeur v) et renvoyant le nombre d’occurrences (c’est-à-dire d’apparitions) de v dans la liste L. Exemple >>> maxi([3, 4, 12, -66, 122, 33, 44]) 122 Exemples Variante : minimum d’une liste non vide >>> print compter([3,1,4,1,5,9,2],3) 1 >>> print compter([3,1,4,1,5,9,2],1) 2 En s’inspirant de la fonction maxi, écrire une fonction mini qui détermine le minimum d’une liste non vide d’entiers. Quelle fonction intégrée réalise la même opération ? Si vous ne trouvez pas, n’hésitez pas à taper la commande suivante. Trouver la fonction intégrée de python réalisant l’opération précédente. Variante : plus grande valeur absolue d’une liste non vide En s’inspirant de la fonction maxi, écrire une fonction max_abs qui détermine la plus grande valeur absolue des éléments d’une liste non vide d’entiers. 4 Plus ou moins Le but de cet exercice est d’illustrer le principe et la force de la méthode de recherche par dichotomie. Écrire une fonction pour jouer à ”c’est plus ! c’est moins !”. L’ordinateur choisit secrètement un entier au hasard entre 1 et 1000 (inclus) et l’utilisateur doit le trouver en un minimum de coups. A chaque réponse proposée, un message s’affiche, qui indique si le nombre à trouver est plus grand, plus petit ou encore si c’est le bon. À la fin, le nombre d’essais est affiché. Exemple >>> max_abs([-10,20,-30]) 30 2 >>> dir(list) Position du maximum d’une liste non vide Écrire une fonction pos_max déterminant la position du maximum d’une liste non vide. La fonction pos_max prend un unique paramètre (une liste non vide d’entiers) et renvoie un entier, l’indice du maximum. Si le maximum est atteint plusieurs fois, la fonction doit renvoyer le plus petit indice correspondant au maximum. Attention, en python, les indices des listes commencent à zéro. Il est naturellement exclu d’utiliser une fonction intégrée de python. Exemple >>> pos_max([3, 4, 122, -66, 122, 33, 44]) 2 >>> from random import randint >>> help(randint) Exemple >>> jouer() 500 Trop grand ! 100 Trop petit ! ... 499 Bravo ! Avec 12 essais 1/4 2/4 Informatique - T.P. n◦ 5 Claude Bernard 2013-2014 Bonus Exemples Modifier le programme précédent pour que l’ordinateur joue tout seul. L’utilisateur rentre un nombre entre 1 et 1000 (inclus). Et l’ordinateur affiche les questions et les réponses. L’ordinateur utilisera naturellement la méthode de recherche par dichotomie. Exemple >>> joue_2() Entrez le nombre a deviner (entre 0 et 1000 inclus) : 15 500 : Trop grand ! 250 : Trop grand ! 125 : Trop grand ! 62 : Trop grand ! 31 : Trop petit ! 15 : Bravo ! Avec 6 essais 5 Informatique - T.P. n◦ 5 Claude Bernard 2013-2014 >>> eleves = [(’Nicolas’, 3),(’Alceste’,7),(’Rufus’,3),(’Eudes’,8), (’Agnan’,10)] >>> place(eleves, "Agnan") 1 >>> place(eleves, "Nicolas") 4 8 Bonus : l’élu Lors d’une élections, six candidats (numérotés de 0 à 5) se présentent. Écrire une fonction elu prenant deux arguments la liste des votes (contenant uniquement des entiers de 0 à 5 inclus) et la liste des candidats (contenant six chaı̂nes de caractères) et renvoyant le nom de l’élu. En cas d’égalité entre plusieurs candidats, une loi -injuste- stipule que l’élu sera celui ayant le plus petit numéro. Exemples Bonus : liste croissante Écrire une fonction est croissante qui vérifie si une liste d’entiers est croissante. Exemples >>> est_croissante([1, 8, 5, 2]) False >>> est_croissante([1, 2, 2, 5]) True >>> est_croissante([5]) True >>> est_croissante([]) True >>> candidats = ["M. Anderson","Morpheus","Tank","le Mulot","Trinity","Agent Smith"] >>> votes = [0,1,2,0,4,1,1,3,5,4,0,0] >>> elu(votes, candidats) M. Anderson >>> votes = [0,1,1,0] >>> elu(votes, candidats) M. Anderson Variante Écrire une fonction strict, qui teste désormais si une liste est strictement croissante. 6 Bonus : fin du championnat Il ne reste plus qu’une journée de championnat. Écrire une fonction peut_encore_gagner qui prend un unique argument : une liste de doublets (nom, score) où le premier est le nom d’un club (une chaı̂ne de caractères) et le deuxième est le score avant la dernière journée (un entier). La fonction doit afficher le nom de tous les clubs qui peuvent encore gagner le championnat. Dans les sports les plus passionnants, une victoire rapporte deux points, un match nul seulement un point et une défaite rien naturellement. >>> clubs = [("Montpellier", 41),("Dunkerque", 31),("Chambery", 39),("Ivry", 20)] >>> peut_encore_gagner(clubs) Montpellier Chambery 7 Bonus : classement Nicolas veut savoir si il est encore dernier à la dictée. Aidez-le en écrivant une fonction classement qui prend deux arguments. Le premier est une liste dont chacun des éléments est formé d’une chaı̂ne (le nom de l’élève) et d’un entier (sa note). Le second est le nom de l’élève dont on souhaite connaı̂tre le classement. La fonction doit renvoyer le classement de l’élève. On suppose qu’il n’y a pas d’homonymes dans la classe. 3/4 4/4