检查数字是否回文

Checking if number is palindromic

通过将用户输入作为函数调用参数传递并使用除法。 即使我的逻辑是正确的,我也无法理解我哪里出错了。

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)

您在每次迭代中都覆盖了 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

您的代码的唯一问题是,由于您在 rev 的计算中更改了 x,因此您的最终陈述:

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

将来,当您尝试调试某些东西时,打印出正在变化的变量(revx)。这将帮助您在将来发现类似的错误:)

有几种方法可以改进代码以使其正常运行,并使格式更简洁:

要修复您的代码,您需要确保您没有编辑 x 的值,而是编辑具有相同值的另一个变量的值,以便在您的最终比较中,您正在比较它到实际值:

class 解法:

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)

其次,这里没有真正的理由需要使用 class。使用函数本身也同样有效:

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())