Exercices☘
Exercice☘
Donner un code possible pour le corps de la fonction suivante:
def max_avec_absent(tab, i):
"""
tab -- liste d'entiers
i -- indice de liste
Renvoie un couple (j, v) où j est l'indice de la valeur v
dans tab et où v est la valeur maximale de tab privée de tab[i].
>>> max_avec_absent([2, 8, 3, 5], 0)
(1, 8)
>>> max_avec_absent([2, 8, 3, 5], 1)
(3, 5)
"""
Réponse
Un code possible:
def max_avec_absent(tab, i):
"""
tab -- liste d'entiers
i -- indice de liste
Renvoie un couple (j, v) où j est l'indice de la valeur v
dans tab et où v est la valeur maximale de tab privée de tab[i].
>>> max_avec_absent([2, 8, 3, 5], 0)
(1, 8)
>>> max_avec_absent([2, 8, 3, 5], 1)
(3, 5)
"""
assert len(tab) > 1, "Attention tab doit contenir au moins deux éléments."
if i == 0:
indice = 1
maxi = tab[1]
else:
indice = 0
maxi = tab[0]
for k, v in enumerate(tab):
if k!=i and v > maxi:
indice = k
maxi = v
return (indice, maxi)
Exercice☘
Donner un code possible pour le corps de la fonction suivante:
def predecesseur(tab, v):
"""
tab -- liste d'entiers
préconditions: len(tab) > 1, éléments de tab tous distincts
v -- valeur d'un élément de tab
renvoie la plus grande valeur de tab qui soit strictement inférieure à v.
renvoie -inf si cette valeur n'existe pas.
>>> predecesseur([3, 2, 8, 5], 2)
-inf
>>> predecesseur([3, 2, 8, 5], 3)
2
>>> predecesseur([3, 2, 8, 5],8)
5
"""
Réponse
Un code possible:
import math
def tous_distincts(tab):
"""
tab -- liste
renvoie True si tous les éléments de tab sont différents, False sinon.
"""
for i in range(len(tab)-1):
for j in range(i+1, len(tab)):
if tab[i] == tab[j]: return False
return True
def predecesseur(tab, v):
"""
tab -- liste d'entiers
préconditions: len(tab) > 1, éléments de tab tous distincts
v -- valeur d'un élément de tab
renvoie la plus grande valeur de tab qui soit strictement inférieure à v.
renvoie -inf si cette valeur n'existe pas.
>>> predecesseur([3, 2, 8, 5], 2)
-inf
>>> predecesseur([3, 2, 8, 5], 3)
2
>>> predecesseur([3, 2, 8, 5],8)
5
"""
assert v in tab, "L'argument v doit être élément de tab."
assert tous_distincts(tab), "Les éléments de tab doivent être distincts."
assert len(tab)>1, "tab doit contenir au moins deux éléments."
pred = -math.inf
for w in tab:
if pred < w < v:
pred = w
return pred
Exercice☘
Donner un code possible pour le corps de la fonction suivante:
def maxi(liste, f):
"""
liste -- liste d'entiers
f -- fonction int -> int
renvoie le maximum des f(x), x parcourant la liste
"""
Tester ensuite votre fonction avec une fonction valeur_absolue
que vous aurez définie.
On doit par exemple obtenir:
>>> maxi([2, 8, -9, 3], valeur_absolue)
9
Un code possible
def valeur_absolue(x):
if x > 0:
return x
else:
return -x
def maxi(liste, f):
"""
liste -- liste d'entiers
f -- fonction int -> int
renvoie le maximum des f(x), x parcourant la liste
"""
m = f(liste[0])
for v in liste:
if f(v) > m:
m = f(v)
return m
print(maxi([2, 8, -9, 3], valeur_absolue))
Exercice☘
Écrire un code possible pour la fonction suivante:
def maxiEcartMoy(liste):
"""
liste -- liste de nombres
renvoie la plus grande distance entre un nombre de la liste et la moyenne de cette liste.
>>> maxiEcartMoy([8, 10, 12, 14]) # moyenne: 11, distance 3 entre 8 et 11 (ou entre 14 et 11)
3.0
"""
Un code possible
def distance(a,b):
"""
a et b sont deux nombres
renvoie la distance entre ces deux nombres.
"""
if a > b:
return a-b
else:
return b-a
def moyenne(liste):
"""
liste -- liste de nombres
renvoie la moyenne des nombres de la liste.
"""
s = 0
for v in liste:
s += v
return s/len(liste)
def maxiEcartMoy(liste):
"""
liste -- liste de nombres
renvoie la plus grande distance entre un nombre de la liste et la moyenne de cette liste.
>>> maxiEcartMoy([8, 10, 12, 14]) # moyenne: 11, distance 3 entre 8 et 11 (ou entre 14 et 11)
3.0
"""
moy = moyenne(liste)
m = distance(liste[0], moy)
for v in liste:
d = distance(v, moy)
if d > m: m = d
return m
print(maxiEcartMoy([8, 10, 12, 14]))