/home/myriam/Desktop/préparation À l`oral/planches mathalgo

publicité
"""
Exercice d'algorithmique : planche 7
"""
#question 1
import random as rd
def lancer(n):
a=rd.randint(1,n)
b=rd.randint(1,n)
return (a,b)
"""
la fonction lancer itérée plusieurs fois conduit au tirage de deux numéros identiques
au bout de 4 lancers (ce nombre varie évidemment)
"""
#question 2
def rang(n):
a,b=lancer(n)
k=1
while a!=b:
a,b=lancer(n)
k+=1
return k
#question 3
N=1000 #on change la valeur de N pour avoir le résultat après 10 000 exécutions
s=0
for i in range(N):
s+=rang(6)
moy=s/float(N)
print(moy)
"""
On s'aperçoit que le résultat est proche de 6.
C'est logique, car le rang est une variable aléatoire suivant une loi géométrique
de paramètre 1/6. Son espérance est donc égale à 6.
1/6 est la probabilité de succès :
avoir 2 nombres identiques = 6 possibilités / 36 possibilités de couples (a,b)
"""
#question 4
def rang2(n):
a,b=lancer(n)
k=1
while a+b<10:
a,b=lancer(n)
k+=1
return k
"""
Pour estimer la probabilité p d'avoir a+b>=10, on peut procéder comme précédemment
en calculant expérimentalement l'espérance de rang2.
S'agissant d'une variable aléatoire correspondant à un temps d'attente, elle suit une
loi géométrique de paramètre p la probabilité du succès.
L'espérance vaut 1/p. Le calcul de l'espérance donne p.
1
Prenons ici n=6
"""
s2=0
for i in range(N):
s2+=rang(6)
moy2=s2/float(N)
print(moy2)
"""
On obtient un nombre proche de 6 pour moy2. p est proche de 1/6
"""
p=1/moy2
print('premier calcul :',p)
"""
Une autre méthode consiste à itérer K fois le lancer (avec K grand), compter le
nombre de fois où a+b>=10 et diviser ce nombre par K.
"""
K=10000
c1=0
for i in range(K):
a,b=lancer(6)
if a+b>=10:
c1+=1
p2=c1/float(K)
print('deuxième calcul :',p)
2
Téléchargement