Listes et simulations aléatoires
Cours complet · sciences numériques et technologie (seconde), chapitre 6 · seconde générale, SNT
Travailler ce chapitre sur Adloun Exercices corrigés de ce chapitre
Une liste regroupe plusieurs valeurs ordonnées dans une même structure. Associée au module random, elle permet de simuler des expériences aléatoires et d'illustrer la loi des grands nombres.
6.1 Manipuler une liste
- créer une liste vide :
L = []; - ajouter un élément à la fin :
L.append(element); - longueur d'une liste :
len(L); - terme de rang :
L[i]; compter les occurrences d'une valeur :L.count(v).
Une liste est une rangée de cases numérotées : les indices (orange) commencent à , si bien que le dernier élément d'une liste de longueur porte l'indice .
Dans une liste L de longueur , le premier élément est L[0] et le dernier est L[n-1] (aussi noté L[-1]). Écrire L[n] provoque une IndexError.
Méthode : Parcourir une liste
Deux écritures équivalentes :
- par valeur :
for element in L:donne chaque valeur ; - par indice :
for i in range(len(L)):donne les rangs, et l'on accède àL[i].
notes = [12, 8, 15, 10]
print(len(notes)) # 4
print(notes[0]) # 12 (premier)
print(notes[-1]) # 10 (dernier)
somme = 0
for note in notes:
somme = somme + note
print(somme / len(notes)) # Affiche : 11.25
6.2 Le module random et les simulations
Après import random :
random.randint(a, b): un entier aléatoire entreaetbinclus ;random.random(): un flottant aléatoire dans .
On définit une fonction qui simule un lancer de dé, puis on constitue une série statistique en répétant son appel :
import random
def lancer():
return random.randint(1, 6)
serie = []
for i in range(20):
serie.append(lancer()) # 20 lancers rangés dans la liste
print(serie)
Méthode : Estimer une probabilité par simulation
- simuler l'expérience avec
random.randint(ourandom.random) ; - la répéter fois dans une boucle, en comptant les succès de l'événement ;
- renvoyer la fréquence , qui approche la probabilité pour grand.
Fréquence de « pile » (1) selon la taille de l'échantillon :
import random
def frequence_pile(N):
nb_pile = 0
for i in range(N):
piece = random.randint(0, 1) # 0 = face, 1 = pile
if piece == 1:
nb_pile = nb_pile + 1
return nb_pile / N
for N in [10, 100, 1000, 10000]:
print(N, ":", frequence_pile(N))
# Sortie possible : 10 : 0.4 / 100 : 0.53 / 1000 : 0.487 / 10000 : 0.502
Plus est grand, plus la fréquence se rapproche de la probabilité et moins elle fluctue.