Sujet n°3
Sujet original
Pour télécharger l'énoncé original, cliquer ici.
Exercice n°1☘
Dans cet exercice, les nombres sont des entiers ou des flottants.
Écrire une fonction moyenne()
renvoyant la moyenne pondérée d’une liste non vide,
passée en paramètre, de tuples à deux éléments de la forme (valeur,
coefficient)
où valeur
et coefficient
sont des nombres positifs ou nuls.
Commentaires
Ici, le mot « liste » est à comprendre dans le sens « liste Python » (c'est-à-dire tableau) plutôt que dans le sens du type abstrait de données liste étudié en Terminale.
Si la somme des coefficients est nulle, la fonction renvoie None
, si la somme des
coefficients est non nulle, la fonction renvoie, sous forme de flottant, la moyenne des
valeurs affectées de leur coefficient.
Exemples
>>> moyenne([(8, 2), (12, 0), (13.5, 1), (5, 0.5)])
9.142857142857142
>>> moyenne([(3, 0), (5, 0)])
None
$$ \frac{8 \times 2 + 12 \times 0 + 13,5 \times 1 + 5 \times 0,5}{2+0+1+0,5} $$
Une solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Exercice n°2☘
On travaille sur des dessins en noir et blanc obtenus à partir de pixels noirs et blancs.
La figure « cœur » ci-contre va servir d’exemple.
On la représente par une grille de nombres, c’est-à-dire par une liste
composée de sous-listes de mêmes longueurs.
Chaque sous-liste représentera donc une ligne du dessin.
Commentaires
Ici, le mot « liste » est à comprendre dans le sens « liste Python » (c'est-à-dire tableau) plutôt que dans le sens du type abstrait de données liste étudié en Terminale.
Dans le code ci-après, la fonction affiche
permet d’afficher le dessin.
Les pixels noirs (1
dans la grille) seront représentés par les caractères
"*
" et les blancs (0
dans la grille) par deux espaces.
La fonction zoomListe()
prend en argument une liste liste_depart
et un
entier k
. Elle renvoie une liste où chaque élément de liste_depart
est
dupliqué k
fois.
La fonction zoomDessin()
prend en argument la grille dessin
et renvoie une
grille où toutes les lignes de dessin
sont zoomées k
fois (c’est-à-dire, on applique à chaque
ligne la fonction zoomListe
avec comme second paramètre k
) et
répétées k
fois.
Compléter le code ci-dessous :
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 43 44 45 |
|
Commentaires sur le code original
Pour télécharger l'original du fichier à compléter, cliquer ici.
Exemples
>>> affiche(coeur)
* * * *
* * * *
* * *
* *
* *
* *
* *
* *
* *
*
>>> affiche(zoom(coeur, 3))
* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * *
* * *
* * *
Une solution
coeur = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0],
[0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0],
[0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
def affiche(dessin):
''' affichage d'une grille : les 1 sont représentés par
des " *" , les 0 par deux espaces " "
La valeur "" donnée au paramètre end permet
de ne pas avoir de saut de ligne. '''
for ligne in dessin:
for col in ligne:
if col == 1:
print(" *", end="")
else:
print(" ", end="")
print()
def zoomListe(liste_depart, k):
'''renvoie une liste contenant k fois chaque
élément de liste_depart'''
liste_zoom = []
for elt in liste_depart :
for i in range(k):
liste_zoom.append(elt)
return liste_zoom
def zoomDessin(grille, k):
'''renvoie une grille ou les lignes sont zoomées k fois
ET répétées k fois'''
grille_zoom=[]
for elt in grille:
liste_zoom = zoomListe(elt, k)
for i in range(k):
grille_zoom.append(liste_zoom)
return grille_zoom
if __name__ == '__main__':
affiche(coeur)
affiche(zoomDessin(coeur, 3))