Ep 10
le document
l'algorithme
Issue de : 23-NSI-03
EXERCICE 1
Dans cet exercice on cherche Ă calculer la moyenne pondĂ©rĂ©e dâun Ă©lĂšve dans une matiĂšre donnĂ©e. Chaque note est associĂ©e Ă un coefficient qui la pondĂšre.
Par exemple, si ses notes sont : 14 avec coefficient 3, 12 avec coefficient 1 et 16 avec coefficient 2, sa moyenne pondérée sera donnée par
\(\dfrac{14 \times 3 + 12 \times 1 + 16 \times 2 }{3+1+2} = 14.333...\)
Ăcrire une fonction moyenne :
- qui prend en paramÚtre une liste notes non vide de tuples à deux éléments entiers de la forme (note, coefficient) (int ou float) positifs ou nuls ;
- et qui renvoie la moyenne pondérée des notes de la liste sous forme de flottant si la somme des coefficients est non nulle, None sinon.
Exemple :
đ Script Python>>> moyenne([(8, 2), (12, 0), (13.5, 1), (5, 0.5)])
9.142857142857142
>>> moyenne([(3, 0), (5, 0)])
None
RĂ©ponse
Complétez le code ci-dessous
# Mettez votre code icibksl-nl
Solution
def moyenne(tab):bksl-nl somme = 0bksl-nl coeffs = 0bksl-nl for couple in tab:bksl-nl somme += couple[0] py-str couple[1]bksl-nl coeffs += couple[1]bksl-nl if coeffs == 0:bksl-nl return Nonebksl-nl return somme / coeffsbksl-nlbksl-nltry:bksl-nl assert round(moyenne([(8, 2), (12, 0), (13.5, 1), (5, 0.5)]),8) == 9.14285714bksl-nl assert moyenne([(3, 0), (5, 0)]) == Nonebksl-nl print('Tout semble correct đ')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đ€')bksl-nl
```
EXERCICE 2
On travaille sur des dessins en noir et blanc obtenu Ă partir de pixels noirs et blancs :
La figure « cĆur » ci-dessus 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ĂȘme longueurs.
Chaque sous-liste représentera donc une ligne du dessin.
Dans le code ci-dessous, la fonction affiche
permet dâafficher le dessin. Les pixels noirs (1 dans la grille) seront reprĂ©sentĂ©s par le caractĂšre * et les blancs (0 dans la grille) par deux espaces.
La fonction Liste_zoom
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 Dessin_zoom
prend en argument une grille grille
et renvoie une grille oĂč toutes les lignes de grille
sont zoomées k
fois et répétées k
fois.
Compléter les fonctions liste_zoom et dessin_zoom du code suivant :
đ Script Python |
---|
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 | def affiche(dessin):
''' affichage d'une grille : les 1 sont représentés par
des "*" , les 0 par un espace " " '''
for ligne in dessin:
affichage = ''
for col in ligne:
if col == 1:
affichage = affichage + "*"
else:
affichage = affichage + " "
print(affichage)
def liste_zoom(liste_depart,k):
'''renvoie une liste contenant k fois chaque élément de
liste_depart'''
liste_zoomee = ...
for elt in ... :
for i in range(k):
...
return liste_zoomee
def dessin_zoom(grille,k):
'''renvoie une grille oĂč les lignes sont zoomĂ©es k fois
ET répétées k fois'''
grille_zoomee=[]
for ligne in grille:
ligne_zoomee = ...
for i in range(k):
... .append(...)
return grille_zoomee
|
Exemple :
đ Script Python>>> coeur = [[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]]
>>> affiche(coeur)
** **
* * * *
* * *
* *
* *
* *
* *
* *
* *
*
>>> affiche(dessin_zoom(coeur,2))
**** ****
**** ****
** ** ** **
** ** ** **
** ** **
** ** **
** **
** **
** **
** **
** **
** **
** **
** **
** **
** **
** **
** **
**
**
>>> liste_zoom([1,2,3],3)
[1, 1, 1, 2, 2, 2, 3, 3, 3]
RĂ©ponse
Complétez le code ci-dessous
coeur = [[0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0],bksl-nl [0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0],bksl-nl [0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0],bksl-nl [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],bksl-nl [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],bksl-nl [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],bksl-nl [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0],bksl-nl [0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0],bksl-nl [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0],bksl-nl [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]]bksl-nlbksl-nldef affiche(dessin):bksl-nl ''' affichage d'une grille : les 1 sont reprĂ©sentĂ©s par bksl-nl des "py-str" , les 0 par un espace " " '''bksl-nl for ligne in dessin:bksl-nl affichage = ''bksl-nl for col in ligne:bksl-nl if col == 1:bksl-nl affichage = affichage + "py-str"bksl-nl else:bksl-nl affichage = affichage + " "bksl-nl print(affichage)bksl-nlbksl-nldef listepy-undzoom(listepy-unddepart,k):bksl-nl '''renvoie une liste contenant k fois chaque Ă©lĂ©ment debksl-nl listepy-unddepart'''bksl-nl listepy-undzoomee = ... bksl-nl for elt in ... : bksl-nl for i in range(k):bksl-nl ...bksl-nl return listepy-undzoomeebksl-nlbksl-nldef dessinpy-undzoom(grille,k):bksl-nl '''renvoie une grille oĂč les lignes sont zoomĂ©es k fois bksl-nl ET rĂ©pĂ©tĂ©es k fois'''bksl-nl grillepy-undzoomee=[]bksl-nl for ligne in grille:bksl-nl lignepy-undzoomee = ... bksl-nl for i in range(k):bksl-nl ... .append(...) bksl-nl return grillepy-undzoomeebksl-nl
Solution
coeur = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],bksl-nl [0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0],bksl-nl [0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0],bksl-nl [0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0],bksl-nl [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],bksl-nl [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],bksl-nl [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],bksl-nl [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0],bksl-nl [0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0],bksl-nl [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0],bksl-nl [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],bksl-nl [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]bksl-nlbksl-nldef affiche(dessin):bksl-nl ''' affichage d'une grille : les 1 sont reprĂ©sentĂ©s par bksl-nl des "py-str" , les 0 par un espace " " '''bksl-nl for ligne in dessin:bksl-nl affichage = ''bksl-nl for col in ligne:bksl-nl if col == 1:bksl-nl affichage = affichage + "py-str"bksl-nl else:bksl-nl affichage = affichage + " "bksl-nl print(affichage)bksl-nlbksl-nldef listepy-undzoom(listepy-unddepart, k):bksl-nl '''renvoie une liste contenant k fois chaque bksl-nl Ă©lĂ©ment de listepy-unddepart'''bksl-nl listepy-undzoomee = []bksl-nl for elt in listepy-unddepart:bksl-nl for i in range(k):bksl-nl listepy-undzoomee.append(elt)bksl-nl return listepy-undzoomeebksl-nlbksl-nldef zoomDessin(grille, k):bksl-nl '''renvoie une grille oĂč les lignes sont zoomĂ©es k fois bksl-nl ET rĂ©pĂ©tĂ©es k fois'''bksl-nl grillepy-undzoomee = []bksl-nl for elt in grille:bksl-nl listepy-undzoomee = listepy-undzoom(elt, k)bksl-nl for i in range(k):bksl-nl grillepy-undzoomee.append(listepy-undzoomee)bksl-nl return grillepy-undzoomeebksl-nlbksl-nlaffiche(zoomDessin(coeur,2))bksl-nlbksl-nltry:bksl-nl assert listepy-undzoom([1,2,3],3) == [1, 1, 1, 2, 2, 2, 3, 3, 3]bksl-nl print('Tout semble correct đ')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đ€')bksl-nlbksl-nl