Après avoir testé le code, l'erreur se produit ici
File "test.py", line 120, in resoudre_simple
if self.grille[i][j]==k+1:
TypeError: 'int' object is not subscriptable
En fait, à ce moment, self.grille contient ça
[0, [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0]]
alors qu'à l'initialisation, ça contenait ça
[[0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0]]
la première liste de 9 entiers a été remplacée par un seul entier. Donc l'appel grille[i][j] ne peut pas marcher car il n'y a plus une liste en position 0, mais un entier qui n'est pas indexable car pas itérable (si je ne dis pas d'ânerie).
La ligne responsable de ce changement semble être
M[i][j][k]=0
Je pense que c'est lié au fait que le mode de création de M fait que cet objet contient au final de multiples références au même objet. Il vaudrait peut-être mieux créer M en utilisant une copie profonde de self.grille?
import copy
...
M=[[copy.deepcopy(self.grille)] for nbr in range(9)]
Mais je suis encore peu expérimenté en Python et je n'ai pas creusé pour tenter de comprendre l'algorithme, d'autant que je me demande si le code de la classe est complet
J'espère que ça t'aidera quand même un peu.