通过将用户输入作为函数调用参数传递并使用除法。即使我的逻辑是正确的,我也无法理解我哪里错了。
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
对于将来,当您尝试调试某个东西时,打印出正在更改的变量(rev
和x
)。这将有助于您在未来发现类似的错误:)