Salut à tous,

Pour un projet de jeu de Reversi en Python en NSI, je dois implémenter une classe Plateau utilisant la surcharge des opérateurs () __call__ :

class Plateau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
    def __init__ (self, long, haut):
        self.m_long = long
        self.m_haut = haut
        self.matrice = []
        for i in range (self.m_long*self.m_haut):
            self.matrice.append('_')
        """
        Initialisation de la classe Plateau, prenant un nombre de lignes et de colonnes comme paramètres,
        le plateau fonctionne à l'aide d'une matrice remplie au préalable d'underscores.
        """
 
    def __call__ (self, x, y):
        assert (x < self.m_long and y < self.m_haut, 'Coordonnées invalides')
        indice = y * self.m_haut + x
        return self.matrice[indice]
        """
        Surcharge des opérateurs () permettant d'accéder à une valeur de la matrice à l'aide de ses coordonnées.
        """
 
    def __repr__ (self):
        affichage = ""
        affichage += "   "
        for j in range (self.m_haut):
            affichage += str(j) + " "
        affichage += "\n"
        # Ligne du haut affichant les coordonnées x        
 
        for i in range(self.m_long):
            affichage += str(i) + "  "
            for j in range(self.m_haut):
                affichage += str(self(i, j)) + " "
            affichage += "\n"
        # Affichage des coordonnées y et des valeurs de la matrice        
 
        return affichage
        """
        Affichage du Plateau sous la forme
           1 2 ...
        1  _ _
        2  _ _
        ...
        """
 
plateau = Plateau(8, 8) # Plateau de jeu Reversi instancié avec 8 lignes et 8 colonnes
print(plateau)
print(plateau(0, 0)) # Affichage du coin en haut à gauche de la matrice
plateau(0, 0) = 'X' # ligne faisant planter le programme
L'affichage des cases fonctionne correctement avec la surcharge __call__, sauf que lorsqu'il s'agit de modifier une valeur, cette erreur s'affiche :
SyntaxError: cannot assign to function call
Or, le programme devrait juste changer la valeur de la case car la dernière ligne devrait accéder à plateau.matrice[0], sachant que le type du tableau est str, ce qui ne devrait pas poser problème.
D'après le message d'erreur, il y aurait une erreur de syntaxe, je devrais utiliser les opérateurs ==, qui ne servent pas à affecter une nouvelle valeur, une case d'un tableau est pourtant sensée être modifiable, pourquoi non ici ?

Merci d'avance.