1A.2 - Classes, héritage (correction)

Links: notebook, html, PDF, python, slides, GitHub

Correction.

from jyquickhelper import add_notebook_menu
add_notebook_menu()

Exercice 1 : pièce normale

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

Exercice 2 : pièce truquée

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

Exercice 3 : Pièce mixte

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

Exercice 4 : pièce mixte avec des fonctions

# 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