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):
somme_produits = 0
somme_coefficients = 0
for (note, coefficient) in liste:
somme_produits += note * coefficient
somme_coefficients += coefficient
return somme_produits / somme_coefficientsCeci suppose connus
for (note, coefficient) in liste:, qui sinon peut-être écrite for couple in liste:
note = couple[0]
coefficient = couple[1]somme_produits += note * coefficient qui peut se réduire à une affectation somme_produits = somme_produits + note * coefficientplus lourde et moins lisible, parce qu’elle n’exprime pas directement l’idée “ajouter telle quantité à une variable”.
def moyenne(liste):
somme_produits = sum(note * coefficient for (note, coefficient) in liste)
somme_coefficients = sum(coefficient for (note, coefficient) in liste)
return somme_produits / somme_coefficientsdef pascal(n):
C= [[1]]
for k in range(1,...): #1
Ck = [...] #2
for i in range(1,k):
Ck.append(C[...][i-1]+C[...][...] ) #3
Ck.append(...) #4
C.append(Ck)
return CLe 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
Ck = [[1]] #2
Ck.append(1)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-1i 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):
C = [[1]]
for k in range(1, n + 1): #1
Ck = [1] #2
for i in range(1, k):
Ck.append(C[k-1][i-1] + C[k-1][i] ) #3
Ck.append(1) #4
C.append(Ck)
return C