class Solitaire: # ... def minimale(self): d_resultat = {} d_a_traiter = {self.initial.num():0} file_a_traiter = [self.initial] num_final = self.final.num() while num_final not in d_resultat and file_a_traiter: m = file_a_traiter.pop(0) num = m.num() s = d_a_traiter.pop(num) if num not in d_resultat: d_resultat[num] = s file_a_traiter.extend(self.strate(d_a_traiter, s+1, [m])) try: return d_resultat[num_final] except: KeyError('Motif final inatteignable')