2017-10-01 4 views
-6

Je veux obtenir un nombre quelconque. par exemple: 14892. Et le retourner comme 25903 (en fonction de chaque valeur unicode de caractère)récursion Unicode pour un nombre

C'est ce que j'ai jusqu'à présent:

def convert(n): 
    if len(n)>0: 
     x = (chr(ord(str((int(n[0])+1))))) 
     return x 
+5

Je ne vois pas comment est-ce selon les caractères unicode valeur du tout, vous ajoutez juste 1 à chaque nombre –

+0

s'il vous plaît expliquer la question plus. Cela n'a pas beaucoup de sens avec le contexte – Harry

+2

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. –

Répondre

0
def convert(n): 
    return int(''.join([str(int(elem)+1)[-1] for elem in str(n)])) 

Vous pouvez utiliser une compréhension de la liste.

0

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)])) 
0

Vous pouvez convertir le nombre à une chaîne, utilisez la fonction de traduction pour échanger les numéros, et reconvertir en entier à nouveau:

>>> t=str.maketrans('1234567890','2345678901') 
>>> x = 14892 
>>> y = int(str(x).translate(t)) 
>>> y 
25903