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 :
L'affichage des cases fonctionne correctement avec la surcharge __call__, sauf que lorsqu'il s'agit de modifier une valeur, cette erreur s'affiche :
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 programmeOr, 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.SyntaxError: cannot assign to function call
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.
Partager