""" 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