Pour effectuer cette transformation, vous devez obtenir chaque chiffre et en ajouter un, avec 10 enveloppement autour de 0. La façon simple de faire ce wrapping est d'utiliser l'opérateur de module. Nous pouvons également utiliser la division entière et le module pour extraire les chiffres, et nous pouvons faire les deux opérations en utilisant la fonction divmod
intégrée. Nous stockons les chiffres modifiés dans une liste, car la manière simple de regrouper les chiffres en un seul nombre nécessite les chiffres dans l'ordre inverse.
def convert(n):
a = []
while n:
n, r = divmod(n, 10)
a.append((r + 1) % 10)
n = 0
for u in reversed(a):
n = 10 * n + u
return n
# Test
print(convert(14892))
sortie
25903
Cet algorithme est assez proche de la manière habituelle de faire cette transformation dans les langues traditionnelles. Cependant, en Python, il est en fait plus rapide de faire ce genre de chose en utilisant des chaînes, puisque les constructeurs str
et int
peuvent faire la plupart de leur travail à la vitesse C. Le code résultant est un peu plus cryptique, mais beaucoup plus compact.
def convert(n):
return int(''.join([str((int(c) + 1) % 10) for c in str(n)]))
Je ne vois pas comment est-ce selon les caractères unicode valeur du tout, vous ajoutez juste 1 à chaque nombre –
s'il vous plaît expliquer la question plus. Cela n'a pas beaucoup de sens avec le contexte – Harry
Et il n'y a pas de récursion ici non plus. Pas que ce soit une mauvaise chose: la récursivité devrait être évitée en Python, sauf si vous en avez réellement besoin. –