#python #class #palindrome
#python #класс #палиндром
Вопрос:
Я получаю ошибку
«Ошибка имени: имя ‘is_palindrome’ не определено»
Я нашел эту простую проблему на веб-сайте, который просит создать класс с именем Palindrome
и внутри него функцию с именем is_palindrome
для проверки заданного слова и возврата, True
если это palindrome, а False
в противном случае это должно быть сделано с использованием класса и статического метода (поэтому я не могу их удалить), код приведен ниже.
class Palindrome:
@staticmethod
def is_palindrome(s):
return len(s) < 2 or s[0] == s[-1] and is_palindrome(s[1:-1])
word = input()
print(Palindrome.is_palindrome(word))
Я решил вопрос, удалив объявление класса
другие методы, такие как
return word==word[::-1]
но я пытаюсь понять проблему с приведенным выше кодом, почему, когда я включаю его в класс, я получаю эту ошибку
«Ошибка имени: имя ‘is_palindrome’ не определено»
Комментарии:
1.
return len(s) < 2 or s[0] == s[-1] and is_palindrome(s[1:-1])
выглядит потрясающе2. Я действительно не знаю, какие преимущества дает использование статического метода в классе, а не просто функции.
3. @RobinZigmond как я сказал в вопросе, класс и статический метод были объявлены самим сайтом, я не могу его удалить (и если я это сделаю, это сработает), поэтому я пытаюсь понять, почему это не работает, когда оно включено в класс
4. @DirtyBit Я знаю об отступах в Python, поэтому я уверен, что код имеет правильный отступ (если вы видите что-то неправильное, пожалуйста, скажите мне, в какой строке)
5. @DirtyBit на самом деле это просто проверяет, меньше ли длина мира 2 (что по умолчанию является палиндромом), и если это > 2, то проверьте 1-й символ и последний символ, равны ли они или нет (и продолжайте нарезать его, пока его длина не станет меньше 2)
Ответ №1:
Хотя я не понимаю, как метод в классе или являющийся статическим, помогает, но вот исправление:
class Palindrome:
@staticmethod
def is_palindrome(s):
return len(s) < 2 or s[0] == s[-1] and Palindrome.is_palindrome(s[1:-1])
word = input("Enter your word: ")
print(Palindrome.is_palindrome(word))
ВЫВОД:
Enter your word: ROTAVATOR
True
Редактировать:
Если вы не хотите запутываться в классе, предполагая, что вы больше ничего не делаете:
def is_palindrome(s):
return len(s) < 2 or s[0] == s[-1] and is_palindrome(s[1:-1])
word = input("Enter your word: ")
print(is_palindrome(word))
ПРАВКА 3:
Другой способ:
class Palindrome:
def is_palindrome(self, s):
return len(s) < 2 or s[0] == s[-1] and self.is_palindrome(s[1:-1])
word = input("Enter your word: ")
p_Obj = Palindrome()
print(p_Obj.is_palindrome(word))
Комментарии:
1. понимаю ли я из вашего решения (которое сработало), что я не могу напрямую вызвать метод, который я создал внутри класса, но я должен использовать class_name.method?
2. и класс, и статический метод бесполезны, он уже был объявлен самим сайтом
3. @Serilena удалите статический метод, создайте объект класса, вызовите метод с этим объектом, передайте
self
в методis_palindrome()
, и он также должен работать.4. @Serilena пожалуйста, проверьте правку 3, и если это помогло, вы можете принять ответ: meta.stackexchange.com/questions/5234 /… приветствия
5. первое решение фактически решает проблему, спасибо.
Ответ №2:
Нет необходимости в классе Palindrome. Просто имейте
def is_palindrome(s):
return len(s) < 2 or s[0] == s[-1] and is_palindrome(s[1:-1])
Комментарии:
1. как я уже говорил в своем вопросе, это сработало, когда я удалил класс, но я хочу понять, почему это не работает, когда я включаю его в класс, но все равно спасибо