31 janvier 2022
Cette collection de notes est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 2.0 France.
Se trouve sur la page https://eduscol.education.fr/2661/banque-des-epreuves-pratiques-de-specialite-nsi, dans https://eduscol.education.fr/document/33181/download
Sujet résumé : écrire une fonction moyenne
qui a comme paramètre une liste de couples (note, coefficient), et retourne la moyenne pondérée. Exemple, moyenne([(15,2),(9,1),(12,3)])
s’évalue en 12.5
, parce que
La formule ci-dessus met en évidence une fraction avec un numérateur et un dénominateur qui sont des sommes.
Chaque couple contribue
Il s’agit donc de calculer deux sommes, et d’en retourner le quotient.
def moyenne(liste):
= 0
somme_produits = 0
somme_coefficients for (note, coefficient) in liste:
+= note * coefficient
somme_produits += coefficient
somme_coefficients return somme_produits / somme_coefficients
Ceci suppose connus
for (note, coefficient) in liste:
, qui sinon peut-être écritefor couple in liste:
= couple[0]
note = couple[1] coefficient
somme_produits += note * coefficient
qui peut se réduire à une affectation= somme_produits + note * coefficient somme_produits
plus lourde et moins lisible, parce qu’elle n’exprime pas directement l’idée “ajouter telle quantité à une variable”.
def moyenne(liste):
= sum(note * coefficient for (note, coefficient) in liste)
somme_produits = sum(coefficient for (note, coefficient) in liste)
somme_coefficients return somme_produits / somme_coefficients
def pascal(n):
= [[1]]
Cfor k in range(1,...): #1
= [...] #2
Ck for i in range(1,k):
-1]+C[...][...] ) #3
Ck.append(C[...][i#4
Ck.append(...)
C.append(Ck)return C
Le texte donne (lourdement) toutes les indications nécessaires
Ck
(contient) à l’étape numéro k
, la -ième ligne du tableau.commence
et se termine
par le nombre 1
.En regardant les exemples, on voit que pascal(4)
retourne une liste de 5 sous-listes (lignes). En général, le tableau pascal(n)
contient n+1
lignes, parce que les indices des coefficients vont de 0 à n
.
On peut en inférer, pour le premier “trou” :
n+1
lignes, la boucle for
doit être exécutée n
fois, la première ligne ayant été construite avant cela par la première instruction C = [[1]]
for k in range(1, n + 1)): #1
, de sorte que k
parcoure les valeurs de 1 à n
(attention à range
).Les trous 2 et 4 concernent les extrémités de la ligne, dans lesquels on place des 1
= [[1]] #2
Ck 1) Ck.append(
Quand au trou numéro 3, c’est la traduction de “somme des deux cases au dessus”.
k
, donc elles sont sur la ligne k-1
i
et i-1
, ce qui se voit mieux si on dessine les coefficients dans un triangle rectanglek j| 0 1 2 3 4
----+-----------
0 | 1
1 | 1 1
2 | 1 2 1
3 | 1 3 3 1
4 | 1 4 6 4 1
def pascal(n):
= [[1]]
C for k in range(1, n + 1): #1
= [1] #2
Ck for i in range(1, k):
-1][i-1] + C[k-1][i] ) #3
Ck.append(C[k1) #4
Ck.append(
C.append(Ck)return C