Mathématiques avec Python et Ruby/Ensembles en Python
Dans la théorie des probabilités telle qu'elle a été axiomatisée par Kolmogorov, un évènement est noté par la liste des éventualités qui le réalisent, notée entre accolades.
Représentation des évènements en Python
[modifier | modifier le wikicode]Évènements certain et impossible
[modifier | modifier le wikicode]L'évènement impossible est noté .
L'évènement certain (noté ) est la liste de toutes les éventualités. Pour savoir si un élément est dans un ensemble, on utilise le mot-clé in comme dans 6 in omega qui est un booléen.
Avec un dé
[modifier | modifier le wikicode]On s'apprête à lancer un dé. Alors l'évènement "le résultat sera plus petit que 5" est décrit par l'ensemble . De même, l'évènement "le résultat sera pair" est représenté par .
En Python cela donne :
univers={1,2,3,4,5,6}
petit={1,2,3,4}
pair={2,4,6}
Avec des cartes
[modifier | modifier le wikicode]Cette fois-ci, on extrait au hasard une carte parmi un jeu de 32 cartes.
Faire la liste des 32 cartes (pour constituer l'univers) est un peu fastidieux, alors on va laisser Python le faire :
valeurs={1,7,8,9,10,'Valet','Dame','Roi'}
couleurs={'carreau','cœur','pique','trèfle'}
univers={0}
for v in valeurs:
for c in couleurs:
univers.add(str(v)+' '+c)
univers.remove(0)
print(len(univers))
Il a été nécessaire de mettre initialement un 0 dans l'univers, puis de l'enlever à la fin. C'est pour tromper le typage faible de Python qui considère les accolades vides comme un objet de type dictionnaire et non comme un ensemble. De plus, on transforme les valeurs des cartes en texte même si ce sont des nombres.
L'évènement "la carte est une figure" (pas un nombre) se construit par
couleurs={'carreau','cœur','pique','trèfle'}
figure={0}
for v in {'Valet','Dame','Roi'}:
for c in couleurs:
figure.add(v+' '+c)
figure.remove(0)
print(univers)
Et l'évènement "la carte est un pique" se construit de manière analogue :
valeurs={1,7,8,9,10,'Valet','Dame','Roi'}
pique={0}
for v in valeurs:
pique.add(str(v)+' pique')
pique.remove(0)
print(pique)
Calcul d'évènements
[modifier | modifier le wikicode]Évènements simultanés
[modifier | modifier le wikicode]Notation
[modifier | modifier le wikicode]L'évènement "A et B" se note , et l'opération se note en Python par une esperluette (&) qui est d'ailleurs une ancienne représentation du mot et en latin.
Avec le dé
[modifier | modifier le wikicode]univers={1,2,3,4,5,6}
petit={1,2,3,4}
pair={2,4,6}
print(petit&pair)
Avec les cartes
[modifier | modifier le wikicode]print(figure&pique)
L'affichage confirme qu'il n'y a que trois cartes qui sont à la fois des figures et des piques : Les trois figures de pique Ogier, Pallas et David.
Disjonction
[modifier | modifier le wikicode]Notation
[modifier | modifier le wikicode]De même l'évènement "A ou B" se note , et en Python, le symbole pipe (trait vertical). Python enlève automatiquement les doublons.
Avec le dé
[modifier | modifier le wikicode]univers={1,2,3,4,5,6}
petit={1,2,3,4}
pair={2,4,6}
print(petit|pair)
Avec les cartes
[modifier | modifier le wikicode]print(figure|pique)
print(len(figure|pique))
On peut compter les 17 cartes à la main, mais le comptage par Python est plus sûr. On constate que pour Python, le nombre d'éventualités d'un évènement s'appelle sa longueur.
Contraire d'un évènement
[modifier | modifier le wikicode]Pour calculer le contraire d'un évènement, on le soustrait à l'univers.
Avec le dé
[modifier | modifier le wikicode]univers={1,2,3,4,5,6}
petit={1,2,3,4}
pair={2,4,6}
print(univers-petit)
print(univers-pair)
On constate que le contraire de pair est impair...
Avec les cartes
[modifier | modifier le wikicode]print(univers-figure)
print(univers-pique)
Probabilités
[modifier | modifier le wikicode]On a vu ci-dessus que pour Python, le nombre d'éléments d'un évènement est appelé sa longueur. On peut alors définir la probabilité d'un évènement comme le quotient de sa longueur par celle de l'univers.
Avec le dé
[modifier | modifier le wikicode]def proba(evenement):
return len(evenement)/len(univers)
print(proba(petit))
print(proba(pair))
print(proba(univers/pair&petit))
p1=proba(petit)+proba(pair)-proba(petit&pair)
p2=proba(petit|pair)
print(p1==p2)
Avec les cartes
[modifier | modifier le wikicode]def proba(evenement):
return len(evenement)/len(univers)
print(proba(figure))
print(proba(pique))
print(proba(univers))
p1=proba(figure)+proba(pique)-proba(figure&pique)
p2=proba(figure|pique)
print(p1==p2)