Skip to content
Snippets Groups Projects
Select Git revision
  • de79c4ae4e689fe786e49492de132b2444a34cda
  • main default protected
2 results

main.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    main.py 2.84 KiB
    # rendu de Quentin Hartman
    
    from itertools import chain
    import matplotlib.pyplot as plt
    
    
    class TabletteChocolat:
        def __init__(self, m: int, n: int):
            '''
            On instancie une tablette en fonction de sa taille m*n
            '''
            if not (isinstance(m, int) and isinstance(n, int)):
                raise TypeError('given values must be integers')
            self.m = m
            self.n = n
    
        def __str__(self) -> str:
            return 'Tablette de chocolat de ' + str(self.m) + 'x' + str(self.n)
        # __repr__ n'est pas surchargé car à priori dans notre cas __str__ suffit
    
        def coups_possibles(self):
            '''
            renvoie un générateur des coups possibles
            '''
            result = []
            for i in range(1, self.m):
                result.append((i, 0))
            for j in range(1, self.n):
                result.append((0, j))
            return chain(result)
    
        def est_possible(self, couple: tuple) -> bool:
            '''
            renvoie si oui ou non un coup est possible sur la tablette courante
            '''
            return couple in list(self.coups_possibles())
    
        def coupe(self, couple: tuple):
            '''
            renvoie la tablette qui résulte de la coupe donnée sur la tablette courante
            '''
            return TabletteChocolat(self.m - couple[0], self.n - couple[1])
    
        def plot(self):
            plt.gca().set_aspect('equal')
            plt.axis('off')
            plt.fill([0, self.m, self.m, 0], [0, 0, self.n, self.n], color='#D5B799')
            for i in range(self.m):
                for j in range(self.n):
                    plt.plot([i+0.1, i+0.9, i+0.9, i+0.1, i+0.1], [j+0.1, j+0.1, j+0.9, j+0.9, j+0.1], color='#554739')
            plt.fill([self.m-0.9, self.m-0.1, self.m-0.1, self.m-0.9], [0.1, 0.1, 0.9, 0.9], color='#554739')
            plt.show()
    
        def demander_coup(self):
            coup = ''
            taille_coupe = -1
            while not coup in ['l', 'c']:
                print('il faut choisir quoi couper :')
                coup = str(input('Couper des lignes (l) ou des colonnes (c) ? '))
            if coup == 'l':
                print('voici les coups possibles : ', ', '.join(str(i) + ' lignes' for i in range(1, self.n)))
                while not 1 <= taille_coupe <= self.n-1:
                    taille_coupe = int(input('combien de lignes couper ? '))
                return self.coupe((0, taille_coupe))
            if coup == 'c':
                print('voici les coups possibles : ', ', '.join(str(i) + ' colonnes' for i in range(1, self.m)))
                while not 1 <= taille_coupe <= self.m-1:
                    taille_coupe = int(input('combien de lignes couper ? '))
                return self.coupe((taille_coupe, 0))
    
    
    A = TabletteChocolat(1, 2)
    B = TabletteChocolat(4, 8)
    print(A)
    print(B)
    print(list(B.coups_possibles()))
    print(B.coups_possibles())
    print(B.est_possible((3, 0)))
    print(B.est_possible((3, 2)))
    print(B.coupe((0, 5)))
    print(B.coupe((2, 0)))
    B.plot()
    B.demander_coup().plot()