2 votes

Vérifier si un nombre est un palindrome sans le transformer en chaîne de caractères

J'ai des difficultés avec ce problème qui consiste à renvoyer simplement Vrai ou Faux si un nombre n est un palindrome.

Note : lorsque je dispose d'un ____ indique les endroits où il y a un blanc à remplir. Il y a 2 espaces vides.

def is_palindrome(n):
    x, y = n, 0
    f = lambda: ____
    while x > 0:
        x, y = ____ , f()
    return y == n

J'ai passé environ une heure sur ce sujet. J'ai découvert que le fait de mettre x//10 dans le deuxième espace vide permettra à la fonction d'itérer sur le nombre de chiffres dans n . Il s'agit alors de la fonction f .

Idéalement, chaque fois qu'il est appelé, il devrait ajouter le dernier chiffre de la rubrique n vers un nouveau numéro, y . Ainsi, si n = 235 la boucle while va itérer 3 fois, et à chaque fois f() est appelé, il doit ajouter 5 , 3 y 2 à la valeur y .

4voto

abccd Points 14107

Voici la logique : (y * 10) + x % 10

def is_palindrome(n):
    x, y = n, 0
    f = lambda: (y * 10) + x % 10
    while x > 0:
        x, y = x//10 , f()
    return y == n

print(is_palindrome(123454321))
# True
print(is_palindrome(12))
# False

y*10 déplace le y actuel vers la gauche d'un chiffre, et x%10 ajoute le dernier chiffre.

print(is_palindrome(235))
# False

Pré-itération : x = 235 , y = 0

Première itération : x = 23 , y = 5

Deuxième itération : x = 2 , y = 53

Troisième itération : x = 0 , y = 532

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X