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

Claude Bernard 2013-2014 Informatique - T.P. n5
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 ´el´ement etc.
Cr´eer un dossier TP5. Pour chaque exercice, cr´eer un nouveau fichier.
1 Maximum d’une liste non vide
´
Ecrire une fonction maxi d´eterminant le maximum d’une liste non vide. La fonction maxi
prend un unique argument, une liste Lnon vide d’entiers, et renvoie un entier, le maximum de
la liste L. Il est naturellement exclu d’utiliser une fonction int´egr´ee de python.
Exemple
>>> maxi([3, 4, 12, -66, 122, 33, 44])
122
Trouver la fonction inegr´ee de python r´ealisant l’op´eration pr´ec´edente.
Variante : minimum d’une liste non vide
En s’inspirant de la fonction maxi, ´ecrire une fonction mini qui d´etermine le minimum d’une
liste non vide d’entiers.
Variante : plus grande valeur absolue d’une liste non vide
En s’inspirant de la fonction maxi, ´ecrire une fonction max_abs qui d´etermine la plus grande
valeur absolue des ´el´ements d’une liste non vide d’entiers.
Exemple
>>> max_abs([-10,20,-30])
30
2 Position du maximum d’une liste non vide
´
Ecrire une fonction pos_max d´eterminant la position du maximum d’une liste non vide. La
fonction pos_max prend un unique param`etre (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
`a z´ero. Il est naturellement exclu d’utiliser une fonction int´egr´ee de python.
Exemple
>>> pos_max([3, 4, 122, -66, 122, 33, 44])
2
1/4
Claude Bernard 2013-2014 Informatique - T.P. n5
Variante
En s’inspirant de la fonction pos_max, ´ecrire une fonction pos_max_2 qui d´etermine l’indice
du maximum en renvoyant le plus grand indice si plusieurs ´el´ements correspondent au maximum.
(Il suffit probablement de changer un unique caract`ere.)
Exemple
>>> pos_max_2([3, 4, 122, -66, 122, 33, 44])
4
3 Nombre d’apparitions
´
Ecrire une fonction compter prenant deux param`etres (une liste Let une valeur v) et
renvoyant le nombre d’occurrences (c’est-`a-dire d’apparitions) de vdans la liste L.
Exemples
>>> print compter([3,1,4,1,5,9,2],3)
1
>>> print compter([3,1,4,1,5,9,2],1)
2
Quelle fonction inegr´ee r´ealise la mˆeme op´eration ? Si vous ne trouvez pas, n’h´esitez pas `a
taper la commande suivante.
>>> dir(list)
4 Plus ou moins
Le but de cet exercice est d’illustrer le principe et la force de la m´ethode de recherche par
dichotomie. ´
Ecrire une fonction pour jouer `a ”c’est plus ! c’est moins !”. L’ordinateur choisit
secr`etement un entier au hasard entre 1 et 1000 (inclus) et l’utilisateur doit le trouver en un
minimum de coups. A chaque r´eponse propos´ee, un message s’affiche, qui indique si le nombre `a
trouver est plus grand, plus petit ou encore si c’est le bon. `
A la fin, le nombre d’essais est affich´e.
>>> from random import randint
>>> help(randint)
Exemple
>>> jouer()
500
Trop grand !
100
Trop petit !
...
499
Bravo ! Avec 12 essais
2/4
Claude Bernard 2013-2014 Informatique - T.P. n5
Bonus
Modifier le programme pr´ec´edent 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´eponses. L’ordinateur
utilisera naturellement la m´ethode 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 Bonus : liste croissante
´
Ecrire une fonction est croissante qui v´erifie 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
Variante
´
Ecrire une fonction strict, qui teste d´esormais si une liste est strictement croissante.
6 Bonus : fin du championnat
Il ne reste plus qu’une journ´ee de championnat. ´
Ecrire une fonction peut_encore_gagner qui
prend un unique argument : une liste de doublets (nom, score) o`u le premier est le nom d’un
club (une chaˆıne de caract`eres) et le deuxi`eme est le score avant la derni`ere journ´ee (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´efaite 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 `a la dict´ee. Aidez-le en ´ecrivant une fonction
classement qui prend deux arguments. Le premier est une liste dont chacun des ´el´ements est
form´e d’une chaˆıne (le nom de l’´el`eve) et d’un entier (sa note). Le second est le nom de l’´el`eve
dont on souhaite connaˆıtre le classement. La fonction doit renvoyer le classement de l’´el`eve. On
suppose qu’il n’y a pas d’homonymes dans la classe.
3/4
Claude Bernard 2013-2014 Informatique - T.P. n5
Exemples
>>> eleves = [(’Nicolas’, 3),(’Alceste’,7),(’Rufus’,3),(’Eudes’,8), (’Agnan’,10)]
>>> place(eleves, "Agnan")
1
>>> place(eleves, "Nicolas")
4
8 Bonus : l’´elu
Lors d’une ´elections, six candidats (num´erot´es de 0 `a 5) se pr´esentent. ´
Ecrire une fonction
elu prenant deux arguments la liste des votes (contenant uniquement des entiers de 0 `a 5 inclus)
et la liste des candidats (contenant six chaˆınes de caract`eres) et renvoyant le nom de l’´elu. En
cas d’´egalit´e entre plusieurs candidats, une loi -injuste- stipule que l’´elu sera celui ayant le plus
petit num´ero.
Exemples
>>> 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
4/4
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !