Проверка палиндромности числа

#python #palindrome

Вопрос:

Путем передачи пользовательского ввода в качестве аргумента вызова функции и использования деления. Я не могу понять, где я ошибаюсь, даже если моя логика верна.

 class Solution:

    def isPalindrome(self, x: int) -> bool:

        x = int(input("Enter The number"))
        rev = 0
        while x > 0:
            temp = x % 10
            rev = (rev * 10   temp)
            x = x // 10
        #print(rev)

        if x == rev:
            return True
        else:
            return False


    sol = Solution()
    a = sol.isPalindrome(x)
    print(a)
 

Комментарии:

1. Класс здесь не нужен, он имеет неправильный отступ и x не определен вне класса, поэтому в показанном коде есть ошибка. Рекомендуется удалить класс, self параметр` и переместить запрос на ввод за пределы функции.

2. Проще преобразовать число в строку, а затем проверить строку на палиндромность.

Ответ №1:

Вы перезаписываете x на каждой итерации, поэтому к концу цикла это не будет равно rev . Вам нужно сохранить это, прежде чем начинать какие-либо вычисления. Напр.:

 x = int(input("Enter The number"))
temp_x = x
rev = 0
while x > 0:
    temp = tepm_x % 10
    rev = (rev * 10   temp)
    temp_x = temp_x // 10
 

Ответ №2:

Есть несколько способов улучшить свой код, чтобы он работал правильно, а также был немного чище отформатирован:

Чтобы исправить свой код, вам нужно убедиться , что вы не редактируете значение x , а редактируете значение другой переменной с тем же значением, чтобы в конечном сравнении вы сравнивали его с фактическим значением:

классовое решение:

 def isPalindrome(self, x: int) -> bool:

    x = int(input("Enter The number"))
    placehold = x
    rev = 0
    while placehold > 0:
        temp = placehold % 10
        rev = (rev * 10   temp)
        placehold = placehold // 10
    #print(rev)

    if x == rev:
        return True
    else:
        return False


sol = Solution()
a = sol.isPalindrome(x)
print(a)
 

Во-вторых, здесь нет реальной причины, по которой вам нужно использовать класс. Использование самой функции работает так же хорошо:

 def isPalindrome():

    x = int(input("Enter The number"))
    placehold = x
    rev = 0
    while placehold > 0:
        temp = placehold % 10
        rev = (rev * 10   temp)
        placehold = placehold // 10
    #print(rev)

    if x == rev:
        return True
    else:
        return False

print(isPalindrome())
 

Ответ №3:

Единственная проблема с вашим кодом заключается в том , что, поскольку вы меняете x свои вычисления rev , ваше окончательное утверждение:

 if x == rev:
 

всегда будет False , если только x=0

Вместо этого просто создайте копию x и сравните rev с ней:

 x = int(input("Enter The number"))
orig = x
rev = 0
while x > 0:
    temp = x % 10
    rev = (rev * 10   temp)
    x = x // 10

if orig == rev:
    return True
else:
    return False
 

На будущее, когда вы пытаетесь что-то отладить, распечатайте переменные, которые изменяются ( rev и x ). Это поможет вам в будущем обнаруживать подобные ошибки 🙂