Python en mathématiques - Niveau 1

Caractéristiques d'une série statistique

Série statistique aléatoire

Une série statistique peut être représentée par une liste. Par exemple, une liste de notes :


L =  [2, 20, 15, 18, 3, 9.5, 12, 7.5]

Écrire une fonction en Python nommée liste_alea() et qui respecte la spécification suivante :

Paramètres trois entiers n, borne_min et borne_max strictement positifs tels que borne_min < borne_max
Valeur renvoyée Une liste de n valeurs, chaque valeur étant obtenue aléatoirement et comprise entre borne_min et borne_max
  • Un rappel
  • Une solution
La fonction randint() du module random permet de générer un entier aléatoire compris entre les deux valeurs données en argument.

			
			

Moyenne

Une série statistique est ici représentée par une liste. Par exemple, une liste de notes, obtenue grâce à la fonction liste_alea() programmée dans l'exercice précédent :

>>> L = liste_alea(8, 0, 20)

>>> L
[2, 20, 15, 18, 3, 9, 12, 7]
	

Écrire une fonction en Python qui respecte la spécification suivante :

Paramètres une liste L contenant les valeurs d'une série statistique
Valeur renvoyée la moyenne de la série
  • Une solution
  • Une autre solution
  • Encore une solution

On additionne les valeurs puis divise par le nombre d'éléments.


			
			

On utilise la fonction sum() qui renvoie la somme des éléments d'une séquence :


			
			

Certains modules proposent déjà une telle fonction :


##----- Importation des modules -----##
from random import randint
from statistics import mean


##----- Définition des fonctions -----##
def liste_alea(n, borne_min, borne_max):
    liste = []					# On part d'une liste vide
    for i in range(n):
        valeur_alea = randint(borne_min, borne_max)
        liste.append(valeur_alea)
    return liste
	
 
##----- Programme principal et interaction -----##
L =  liste_alea(8, 0, 20)
print(L)
print( mean(L) )

Des compléments sont disponibles sur la page de documentation du module statistics.

Moyenne pondérée

On dispose d'une liste de notes et d'une seconde liste donnant les effectifs correspondants :


notes =  [2, 6, 8, 10, 12, 14, 15, 18, 20]
effectifs = [1, 0, 2, 3, 4, 2, 4, 2, 3]

Lecture de ces données :

  • effectifs[2] = 2 et notes[2] = 8 : deux élèves ont eu la note 8.
  • effectifs[5] = 2 et notes[5] = 14 : deux élèves ont eu la note 14.

Écrire une fonction en langage Python nommée moyenne_ponderee() et qui respecte la spécification suivante :

Paramètres une liste L contenant les valeurs d'une série statistique et une seconde liste contenant les effectifs correspondants
Valeur renvoyée la moyenne de la série
  • Une solution
  • Une autre solution
  • ... et une autre

def moyenne_ponderee(valeurs, effectifs) :
    somme_des_notes = 0
    somme_des_effectifs = 0
    for i in range(len(valeurs)) :
        somme_des_notes = somme_des_notes + valeurs[i] * effectifs[i]
        somme_des_effectifs = somme_des_effectifs + effectifs[i]
    return somme_des_notes/somme_des_effectifs
	
 
>>> notes =  [2, 6, 8, 10, 12, 14, 15, 18, 20]

>>> effectifs = [1, 0, 2, 3, 4, 2, 4, 2, 3]

>>> moyenne_ponderee(notes, effectifs)
13.333333333333334
	

Dans cette solution, nous utilisons la fonction pré-programmée sum() qui renvoie la somme des valeurs de la liste passée en argument :


def moyenne_ponderee(valeurs, effectifs) :
    # création d'une liste qui contiendra 
    # les produits valeur * effectif :
    liste = []
    for i  in range(len(valeurs)) :
        liste.append(valeurs[i] * effectifs[i])
		 
    return sum(liste)/sum(effectifs)
	
 
>>> notes =  [2, 6, 8, 10, 12, 14, 15, 18, 20]

>>> effectifs = [1, 0, 2, 3, 4, 2, 4, 2, 3]

>>> moyenne_ponderee(notes, effectifs)
13.333333333333334
	

Essentiellement la même solution que la précédente, mais on crée la liste des produits valeur * effectif différemment :


def moyenne_ponderee(valeurs, effectifs) :
    # création d'une liste qui contiendra 
    # les produits valeur * effectif :
    liste = [effectif * valeur for effectif, valeur in zip(effectifs, valeurs)]	 
    return sum(liste)/sum(effectifs)
	
 
>>> notes =  [2, 6, 8, 10, 12, 14, 15, 18, 20]

>>> effectifs = [1, 0, 2, 3, 4, 2, 4, 2, 3]

>>> moyenne_ponderee(notes, effectifs)
13.333333333333334
	

Pour bien saisir le fonctionnement de cette solution, vous pouvez chercher sur le web "python liste en compréhension" puis "python zip".
La notion de liste en compréhension est au programme des classes de 1ère et de Tale.

On peut aussi éviter la fonction zip:

def moyenne_ponderee(valeurs, effectifs) :
    lg = len(effectifs)
    # création d'une liste qui contiendra 
    # les produits valeur * effectif :
    liste = [effectifs[i] * valeurs[i] for i  in range(lg)]	 
    return sum(liste)/sum(effectifs)
	

Des effectifs aux fréquences

Écrire une fonction en Python qui respecte la spécification suivante :

Paramètres une liste L contenant les effectifs d'une série statistique
Valeur renvoyée une liste frequences contenant les fréquences correspondantes

Pour les tests, utilisez des listes générées aléatoirement avec la fonction liste_alea() programmée dans l'exercice n°1.

  • Une solution
  • Une autre solution

			
			

La même solution, mais avec une liste en compréhension (au programme de 1ère):


			
			

Des effectifs aux effectifs cumulés

Écrire une fonction en langage Python qui respecte la spécification suivante :

Paramètres une liste contenant les effectifs d'une série statistique (dans l'ordre croissant des valeurs de la série statistique)
Valeur renvoyée une liste contenant les effectifs cumulés (croissants) correspondants

Pour les tests, utilisez des listes générées aléatoirement avec la fonction liste_alea() programmée dans l'exercice n°1.

  • Une solution