Correction.
from jyquickhelper import add_notebook_menu
add_notebook_menu()
import random
class Piece :
def tirage_aleatoire(self, precedent) :
return random.randint(0,1)
def moyenne_tirage(self, n):
tirage = [ ]
for i in range (n) :
precedent = tirage[-1] if i > 0 else None
tirage.append( self.tirage_aleatoire (precedent) )
s = sum(tirage)
return s * 1.0 / len(tirage)
p = Piece()
print (p.moyenne_tirage(100))
0.48
class PieceTruquee (Piece) :
def tirage_aleatoire(self, precedent) :
if precedent == None or precedent == 1 :
return random.randint(0,1)
else :
return 1 if random.randint(0,9) >= 3 else 0
p = PieceTruquee()
print (p.moyenne_tirage(100))
0.58
class PieceTruqueeMix (PieceTruquee) :
def tirage_aleatoire(self, precedent) :
if random.randint(0,1) == 0 :
return Piece.tirage_aleatoire(self, precedent)
else :
return PieceTruquee.tirage_aleatoire(self, precedent)
p = PieceTruqueeMix()
print (p.moyenne_tirage(100))
0.67
# ce qui vient de l'énoncé
def moyenne_tirage(n, fonction):
"""
cette fonction fait la moyenne des résultats produits par la fonction passée en argument
"""
tirage = [ ]
for i in range (n) :
precedent = tirage[-1] if i > 0 else None
tirage.append( fonction (precedent) )
s = sum(tirage)
return s * 1.0 / len(tirage)
def truquee (precedent) :
if precedent == None or precedent == 1 :
return random.randint(0,1)
else :
return 1 if random.randint(0,9) >= 3 else 0
# la partie ajoutée pour la correction
print (moyenne_tirage(100, lambda v : random.randint(0,1) if random.randint(0,1) == 0 \
else truquee(v)))
0.51