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
| def permut(mot):
# Transformation du mot en liste car une string est non-modifiable alors qu'une liste l'est
mot=list(mot)
# Le compteur qui va simuler la récursivité
cpt=[0,]*len(mot)
# Première permutation: mot originel
yield "".join(mot)
# Traitement de chaque lettre du mot
i=0
while i < len(mot):
# Si le compteur i n'a pas atteint la lettre courante
if cpt[i] < i:
# Permutation (qui varie selon i pair/impair)
p=cpt[i] if i%2 else 0
(mot[p], mot[i])=(mot[i], mot[p])
# Un mot de plus
yield "".join(mot)
# On mémorise cette position et on recommence
cpt[i]+=1
i=0
continue
# if
# On a atteint la fin du mot pour cette lettre
cpt[i]=0
# On passe à la lettre suivante
i+=1
# while
# permut()
print(tuple("".join(x) for x in permut("abc"))) |
Partager