#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
). Это поможет вам в будущем обнаруживать подобные ошибки 🙂