.. _td1acorrectionsession6rst: ===================================== 1A.2 - Classes, héritage (correction) ===================================== .. only:: html **Links:** :download:`notebook `, :downloadlink:`html `, :download:`python `, :downloadlink:`slides `, :githublink:`GitHub|_doc/notebooks/td1a/td1a_correction_session6.ipynb|*` Correction. .. code:: ipython3 from jyquickhelper import add_notebook_menu add_notebook_menu() .. contents:: :local: Exercice 1 : pièce normale ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code:: ipython3 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)) .. parsed-literal:: 0.48 Exercice 2 : pièce truquée ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code:: ipython3 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)) .. parsed-literal:: 0.58 Exercice 3 : Pièce mixte ~~~~~~~~~~~~~~~~~~~~~~~~ .. code:: ipython3 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)) .. parsed-literal:: 0.67 Exercice 4 : pièce mixte avec des fonctions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code:: ipython3 # 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))) .. parsed-literal:: 0.51