# Dans toutes ces fonctions : la première ligne ("assert") est optionnelle. # Elle sert à vérifier que le "n" entré est de type entier. def petit_chaine(n) : assert type(n) == int , "n n'est pas entier" chaine = str(n) # Conversion de n en chaine liste_triee = sorted(chaine) # Tri de la chaine ; le résultat est une liste chaine = "".join(liste_triee) # Concaténation de la liste en une chaine return int(chaine) # On retourne la chaine convertie en entier def inversion(n) : assert type(n) == int , "n n'est pas entier" chaine = str(n) # Conversion de n en chaine longueur = len(chaine) # Longueur de la chaine r = "" # Initialisation de la variable de retour (chaine) for k in range(longueur): # Reconstruction de la chaine r = r + chaine[longueur-1-k] # en partant du dernier caractère return int(r) # Variante pour seulement 3 chiffres à inverser def inversion_trois_chiffres(n): # n entier à 3 chiffres assert type(n) == int , "n n'est pas entier" N = str(n) L = [N[2],N[1],N[0]] return int("".join(L)) def kaprekar(n) : assert type(n) == int, "n n'est pas entier" u = n liste_valeurs = [u] while u != 495 : u = petit_chaine(u) u = inversion(u)-u liste_valeurs.append(u) return liste_valeurs