Extremum
Chaque exercice est fourni avec un fichier Python à compléter et un énoncé « papier » distribué à l'élève et reproduit ci-dessous.
Remarques importantes
-
Les exercices de cette page ne sont pas classés par ordre de « difficulté », cette notion de difficulté étant subjective et dépendante de chaque élève.
-
Les solutions proposées ne sont que des propositions !
Il existe d'autres codes valables pour répondre à chaque problème que ceux proposés ici : il ne faut pas hésiter à les soumettre à votre enseignant pour qu'il vous donne son avis sur les idées mises en oeuvre.
Maximum☘
Écrire une fonction maximum()
qui prend en paramètre un tableau non vide
d'entiers tab
et qui renvoie le plus grand élément de ce tableau.
Exemple
>>> maximum([98, 12, 104, 23, 131, 9])
131
>>> maximum([-27, 24, -3, 15])
24
>>> maximum([])
AssertionError: Tableau vide !
-
Compléter la définition de la fonction
maximum()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
def maximum(tab): """ tab - Sortie: >>> maximum([98, 12, 104, 23, 131, 9]) 131 >>> maximum([-27, 24, -3, 15]) 24 """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Indice du minimum☘
Écrire le code d’une fonction indice_du_min()
qui prend en paramètre un
tableau d’entiers non vide et non trié tab
, et qui renvoie l'indice de la
première occurrence du minimum de ce tableau.
Exemple
>>> indice_du_min([5])
0
>>> indice_du_min([2, 4, 1])
2
>>> indice_du_min([5, 3, 1, 1, 4])
2
>>> indice_du_min([])
AssertionError: tableau vide !
-
Compléter la définition de la fonction
indice_du_min()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
def indice_du_min(tab): """ tab - Sortie: >> indice_du_min([5]) 0 >>> indice_du_min([2, 4, 1]) 2 >>> indice_du_min([5, 3, 1, 1, 4]) 2 """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Maximum et son indice☘
Écrire une fonction maxi()
qui prend en paramètre un tableau
tab
de nombres entiers et qui renvoie un couple donnant le
plus grand élément de ce tableau ainsi que l’indice de la première
apparition de ce maximum dans le tableau.
Exemple
>>> maxi([1, 5, 6, 9, 1, 2, 3, 7, 9, 8])
(9, 3)
>>> maxi([])
AssertionError: Tableau vide !
-
Compléter la définition de la fonction
maxi()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.1 2 3 4 5 6 7 8 9 10 11 12 13 14
def maxi(tab): """ tab - Sortie: >>> maxi([1, 5, 6, 9, 1, 2, 3, 7, 9, 8]) (9, 3) """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
Minimum et ses indices☘
Écrire une fonction indices_du_mini()
qui prend en paramètre un tableau non vide
tab
de nombres entiers et qui renvoie un couple donnant le
plus petit élément de ce tableau ainsi que le tableau des indices des apparitions
de ce minimum dans le tableau.
Exemple
>>> indices_du_mini([2, 1, 5, 6, 9, 1, 2, 3, 7, 9, 8])
(1, [1, 5])
>>> indices_du_mini([])
AssertionError: Tableau vide !
-
Compléter la définition de la fonction
indices_du_mini()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.1 2 3 4 5 6 7 8 9 10 11 12 13 14
def indices_du_mini(tab): """ tab - Sortie: >>> indices_du_mini([2, 1, 5, 6, 9, 1, 2, 3, 7, 9, 8]) (1, [1, 5]) """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
Minimum jusqu'à☘
Écrire une fonction mini_jusqu_a()
qui prend en paramètres en paramètres un tableau non vide tab
et un indice i
d'un élément de ce tableau.
Cette fonction renvoie l'élément de plus petite valeur parmi les éléments tab[0]
, tab[1]
, ..., jusqu'à tab[i]
inclus.
Exemple
>>> mini_jusqu_a([98, 23, 104, 131, 9, 12], 3)
23
>>> mini_jusqu_a([98, 23, 104, 131, 9, 12], 4)
9
>>> mini_jusqu_a([98, 23, 104, 131, 9, 12], 7)
AssertionError: tab index out of range
-
Compléter la définition de la fonction
mini_jusqu_a()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
def mini_jusqu_a(tab, i): """ tab - i - Sortie: >>> mini_jusqu_a([98, 23, 104, 131, 9, 12], 3) 23 >>> mini_jusqu_a([98, 23, 104, 131, 9, 12], 4) 9 """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
Maximum à partir de☘
Écrire une fonction maxi_a_partir_de()
qui prend en paramètres en paramètres un tableau non vide tab
et un indice i
d'un élément de ce tableau.
Cette fonction renvoie l'élément de plus grande valeur parmi les éléments tab[i]
, tab[i+1]
, ..., jusqu'au dernier élément de tab
inclus.
Exemple
>>> maxi_a_partir_de([98, 23, 104, 131, 9, 12], 3)
131
>>> maxi_a_partir_de([98, 23, 104, 131, 9, 12], 4)
12
>>> maxi_a_partir_de([98, 23, 104, 131, 9, 12], 7)
AssertionError: tab index out of range
-
Compléter la définition de la fonction
maxi_a_partir_de()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
def maxi_a_partir_de(tab, i): """ tab - i - Sortie: >>> maxi_a_partir_de([98, 23, 104, 131, 9, 12], 3) 131 >>> maxi_a_partir_de([98, 23, 104, 131, 9, 12], 4) 12 """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
Correspondance avec un autre tableau☘
La fonction temp_mini()
doit prendre en paramètres :
- un tableau
releve
de valeurs moyennes annuelles des températures dans une ville ; - un tableau
date
des années de relevé des valeurs moyennes annuelles précédentes.
Cette fonction renvoie un couple constitué de la plus petite température relevée au cours de la période et l’année correspondante. En cas d'apparition multiple de cette température, c'est l'année la plus récente qui est renvoyée.
Exemple
On a relevé les valeurs moyennes annuelles des températures à Paris pour la période allant de 2013 à 2019. Les résultats ont été récupérés sous la forme de deux tableaux : l’un pour les températures, l’autre pour les années :
>>> t_moy = [14.9, 13.3, 13.1, 12.5, 13.0, 13.6, 13.7]
>>> annees = [2013, 2014, 2015, 2016, 2017, 2018, 2019]
>>> temp_mini(t_moy, annees)
(12.5, 2016)
>>> t_moy = [14.9, 13.3]
>>> annees = [2013]
>>> temp_mini(t_moy, annees)
AssertionError: Les deux tableaux n'ont pas le même nombre d'élément
-
Compléter la définition de la fonction
temp_mini()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.
On admet qu'aucun des tableaux passé en paramètre n'est vide - inutile de faire une assertion pour ce cas.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
def temp_mini(releve, date): """ releve - date - Sortie: >>> t_moy = [14.9, 13.3, 13.1, 12.5, 13.0, 13.6, 13.7] >>> annees = [2013, 2014, 2015, 2016, 2017, 2018, 2019] >>> temp_mini(t_moy, annees) (12.5, 2016) """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
Correspondances avec un autre tableau☘
La fonction meilleures_notes()
doit prendre en paramètres :
- un tableau
noms_eleves
de noms d'élèves dans une classe ; - un tableau
notes_eleves
des notes obtenues par les élèves précédents à une évaluation.
Cette fonction renvoie un triplet constitué de la plus grande note obtenue, du nombre d'élèves ayant obtenu cette note et d'un tableau des noms des élèves ayant eu cette meilleure note.
Exemple
Avec une évaluation sur 100, on peut avoir :
>>> noms_eleves = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
>>> notes_eleves = [1, 40, 80, 60, 58, 80, 75, 80, 60, 24]
>>> meilleures_notes(noms_eleves, notes_eleves)
(80, 3, ['c', 'f', 'h'])
>>> noms_eleves = ['a', 'b', 'c']
>>> notes_eleves = [1, 40]
>>> meilleures_notes(noms_eleves, notes_eleves)
AssertionError: Les deux tableaux n'ont pas le même nombre d'élément
-
Compléter la définition de la fonction
meilleures_notes()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.
On admet qu'aucun des tableaux passé en paramètre n'est vide - inutile de faire une assertion pour ce cas.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
def meilleures_notes(noms, notes): """ noms - notes - Sortie: >>> noms_eleves = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] >>> notes_eleves = [1, 40, 80, 60, 58, 80, 75, 80, 60, 24] >>> meilleures_notes(noms_eleves, notes_eleves) (80, 3, ['c', 'f', 'h']) """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
|
Plus longue suite de caractères☘
Écrire le code d'une fonction compter_suite()
qui prend en paramètres une chaîne de caractères nommée chaine
ainsi qu'un unique caractère nommé lettre
. Cette fonction renvoie le plus grand nombre d'occurrences consécutives de lettre
dans chaine
.
Exemple
>>> compter_suite('DDDDDDGGGGDDDGDDDDGGGGGGGGDDDDDDDDDDGGD', 'D')
10
>>> compter_suite('33391119099030111140700411111671689431110092', '1')
5
>>> compter_suite('33391119099030111140700411111671689431110092', '11')
AssertionError: Le second argument doit être un unique caractère.
-
Compléter la définition de la fonction
compter_suite()
, sans oublier d'ajouter l'assertion signalée dans l'exemple précédent.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
def compter_suite(chaine, lettre): """ chaine – lettre - Sortie: >>> compter_suite('DDDDDDGGGGDDDGDDDDGGGGGGGGDDDDDDDDDDGGD', 'D') 10 >>> compter_suite('33391119099030111140700411111671689431110092', '1') 5 """ pass if __name__ == '__main__': import doctest doctest.testmod()
-
Compléter le docstring de cette fonction.
- Ajouter au moins deux nouveaux tests avec affichage dans la partie principale
du programme (le
main
).
Une solution possible avec une boucle while
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
Une solution possible avec une boucle for
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|