chapeau.py

Created by ph-moutou

Created on May 07, 2018

1.07 KB

Jeu du chapeau : les E élèves d’une classe ont décidé de fabriquer E-1 étiquettes « perdu » et une étiquette « gagné ». Les étiquettes étant indiscernables sont mises dans un chapeau. Chacun met 1 € sur la table pour constituer une cagnotte et ensuite, à tour de rôle, selon un ordre fixé d’avance et en payant 2 € pour jouer, chaque élève retire une des étiquettes du chapeau et l’y remet après avoir lu, jusqu’à ce que l’un d’eux tire l’étiquette « gagné ». Aucun élève ne passe son tour et si nécessaire on fait un tour supplémentaire. Quelle somme est gagnée en moyenne? Quel est le rang moyen du gagnant? Le programme ci-dessous simule N fois ce jeu et donne une réponse d’autant plus fiable que N est grand.


from random import randint
def chap1(N):#ne tient pas compte des sommes engagees
  E,T,G=40,0,0
  for I in range(N):
    R,J,S=E,0,E
    while R>1:
      R=randint(1,E)
      S=S+2
      J+=1
    T+=S
    G+=((J-1)%E+1)
  print("moyenne des gains=",T/N)
  print("rang moyen du gagnant=",G/N)
 
def chap2(N):#tient compte des sommes M engagees
  E,T,G=40,0,0
  for I in range(N):
    R,J,S,M=E,0,E,1
    while R>1:
      R=randint(1,E)
      S=S+2
      J+=1
    T+=S-2*((J-1)//E+1)
    G+=((J-1)%E+1)
  print("moyenne des gains=",T/N)
  print("rang moyen du gagnant=",G/N) 
  
def chapeau(N):#determine le rang le plus frequent du gagnant
  E,T,G=40,0,0
  L=E*[0] #liste contenant l'effectif des gagnants au rang J
  for I in range(N):
    R,J,S,M=E,0,E,1
    while R>1:
      R=randint(1,E)
      S=S+2
      J+=1
    T+=S-2*((J-1)//E+1)#gain algebrique
    G+=((J-1)%E+1)
    L[(J-1)%E]+=1 #incremente l'effectif des gagnants du rang J
  print("moyenne des gains=",T/N)
  print("rang moyen du gagnant=",G/N) 
  print("rang le plus frequent du gagnant=",L.index(max(L))+1)
  print(L)