检查数字是否是回文的



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

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。在开始任何计算之前,您需要保留is。例如:

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

有几种方法可以改进代码,使其正确运行,并使其格式更干净:

要修复代码,您需要确保没有编辑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())

您的代码唯一的问题是,由于您在计算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)。这将有助于您在未来发现类似的错误:)

相关内容

  • 没有找到相关文章

最新更新