1 Maximum d`une liste non vide 2 Position du maximum d`une liste

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