2012-03-31 5 views
1

Прямо сейчас, у меня есть код, в котором я могу проверить одно слово, будь то палиндром или нет. Я должен ввести слово, и он скажет мне, является ли это палиндром (True) или нет (False)Одно слово Palindrome Checker (True или False)

Мне нужно создать тот, который запрашивает одно слово, затем предоставляет True of False на основе введенного слова. Это то, что я до сих пор.

Я действительно не знаю, как это сделать, любая помощь будет принята с благодарностью.

def isPalindrome(s): 
    if len(s) <= 1: 
     return True 
    else: 
     if s[0] != s[len(s)-1]: 
      return False 
     else: 
      return isPalindrome(s[1:len(s)-1]) 
print(isPalindrome("poop")) 
+1

Код обзора является для улучшения кода, не тогда, когда вам нужна помощь в написании. Я перенес свой вопрос в более подходящее место. –

+1

Почему бы вам просто не создать обратную версию строки, а затем проверить, равны ли две строки? – stephenmuss

+1

[PEP 8] (http://www.python.org/dev/peps/pep-0008/) хотел бы, чтобы вы назвали эту функцию 'is_palindrome' вместо' isPalindrome'. –

ответ

16

Просто создайте обратную строку и проверьте, равны ли они равны.

def isPalindrome(s): 
    return s == s[::-1] 

print isPalindrome('poop') 
+0

действительно, намного проще! – hexparrot

+2

Очаровательный пример текста. –

+0

Это не имеет значения (слова обычно короткие), но вы должны проверять обе половины для равенства (наполовину наполовину, потому что вам не нужна средняя буква в словах нечетной длины.) – kaoD

2

Кроме того, используя обратную строку, но может быть использован в линии, а также (то есть, не требует функции).

def is_palindrome(word): 
    return word == ''.join(reversed(word)) 

print is_palindrome('hello') #False 
print is_palindrome('racecar') #True 
2

Если вы спрашиваете, как получить Python принимать пользовательский ввод, то есть пара вариантов, доступных для вас. Один из вариантов заключается в том, чтобы сделать ваш сценарий запущенным из командной строки и использовать аргумент командной строки, а другой - использовать функцию raw_input. Оба они реализованы в следующем коде.

import sys 

def isPalindrome(word): 
    ... 

if __name__ == '__main__': 
    if len(sys.argv) > 1: 
     inp = sys.argv[1] 
    else: 
     inp = raw_input("Type a word: ") # Which you might want to strip for white space 
    if isPalindrome(inp): 
     print inp,"is a palindrome" 
    else: 
     print inp,"is not a palindrome" 

Несколько других людей предложили альтернативные реализации для isPalindrome, которые, вероятно, лучше, но если вы делаете это как назначение и должны использовать рекурсию, то продолжайте использовать ваши. Кроме того, функция raw_input может быть вызвана в любом месте, удобном в вашем скрипте, и не должна использоваться при вызове из командной строки.

1

здесь мое:

def isPalindrome(word): 
    word=str(word) 
    a=word[::-1] 
    if a!=word: 
     return False 
    elif word=='': 
     return False 
    else: return True 
1

Вы можете попробовать эту функцию:

def is_palindrome(text): 
    return text[:len(text)//2] == text[:(len(text)-1)//2:-1] 

Вот пример использования для справки:

>>> is_palindrome('') 
True 
>>> is_palindrome('a') 
True 
>>> is_palindrome('b') 
True 
>>> is_palindrome('aa') 
True 
>>> is_palindrome('ab') 
False 
>>> is_palindrome('ba') 
False 
>>> is_palindrome('bb') 
True 
>>> is_palindrome('aaa') 
True 
>>> is_palindrome('aab') 
False 
>>> is_palindrome('aba') 
True 
-2

Это то, что я придумал, надеюсь, что он сработает для вас:

def palindrome_(word): 
    word = input("enter your word Here ") 
    return word == word[::-1] 

print palindrome_("word") 
+0

Какая разница с решением Stephenmuss? –

+0

моя ошибка все еще новобранец –

+0

просто добавил строку ввода пользователей –

0

Это мое:

def palindrome_checker(word): 
     return True if len(word) < 2 else (word[0] == word[-1]) and palindrome_checker(word[1:-1]) 
1

Использование строки

индексирования
def is_palindrome(string): 
    return all(char == string[-i - 1] for i, char in enumerate(string)) 

Использование списка реверсивный

def is_palindrome(string): 
    to_list = list(string) 

    # reverse to_list now 
    to_list.reverse() 

    # our reversed list should be equal string as a list 
    # if string is a palindrome 
    return to_list == list(string) 
Смежные вопросы