2014-03-26 4 views
0

Я написал следующую программу, чтобы определить, является ли строка s палиндром с использованием рекурсии. Моя проблема в том, что я не уверен, как добавить оператор печати, который говорит мне, является ли строка палиндром или нет. Я понимаю, что есть другие коды, которые делают то же самое, но я пытаюсь понять, правильны ли мои рассуждения.Определение того, является ли строка Палиндром

import re 
s= raw_input(" Enter a string to check if it is a palindrome ") 
newstring = re.sub('\W', '', s) 
newstring =newstring.lower() 

def Palind(newstring): 

    if newstring[0] != newstring[-1]: 
     #print 'The given string is not a palindrome' 
     return False 
    else: 
     s_remain = newstring[1:-1] 
     if s_remain == '': 
      return True 
     elif len(s_remain) == 1 : 
      return True 
     else: 
      return Palind(s_remain) 


if Palind(newstring): 
    print 'Yes' 
else: 
    print 'No' 
+0

возможно дубликат [Как проверить палиндром с помощью логики Python] (http://stackoverflow.com/questions/17331290/how-to-check-for-palindrome-using-python-logic) – jww

+1

Должен название вопроса должно быть связано с печатью переменной в Python? – jww

ответ

1

Во-первых, правильно отступы код, и правильно строчные вход:

import re 
s= raw_input(" Enter a string to check if it is a palindrome ") 
newstring = re.sub('\W', '', s) 
newstring = newstring.lower() 

def Palind(newstring):  
    if newstring[1] != newstring[-1]: 
     #print 'The given string is not a palindrome' 
     return False 
    else: 
     s_remain = newstring[1:-1] 
     return Palind(s_remain) 

Тогда на самом деле назвать вашу функцию и иметь дело с результатом:

if Palind(newstring): 
    print ('Yes') 
else: 
    print ('No') 

Вот как вы напечатать результат вашей функции.

У вас возникнут проблемы при входе в палиндром хотя, потому что вы никогда не возвращаете истину. Вам нужно будет исправить это, проверив, если вы дошли до конца строки, не возвращая false.

+0

Возможно, вам нужно будет добавить запятую вокруг 'print', чтобы убедиться, что он работает для людей Python 3, которые приземляются здесь (и кто нарушает основные функции печати ... Можете ли вы представить, что бы произошло, если' printf' сломался на C99). – jww

+1

Я уверен, что Python 3 человека узнают, что один очень быстро в любом случае, но уверен, я их добавлю. – Blorgbeard

+0

@Blorgbeard 'rodor' -> 'Нет'; 'a' -> IndexError: индекс строки вне диапазона. – TessellatingHeckler

1

Ваша логика примерно правильная, но вам не хватает некоторых вещей.

  1. Первый символ в строке является string[0] не string[1], так что вы сравниваете неправильные символы.

  2. Вам необходимо позвонить в Palind(), а также def.

  3. Если вы исправляете эти проблемы, вы берете одну букву с каждой стороны строки каждый раз, она становится короче и короче - следующая интересная вещь, которая происходит, - вы либо сходитесь к одному персонажу, либо вы исчерпаете символов. Вы должны искать это состояние.

+0

@Blorgbeard Я забыл добавить комментарии, которые помогли бы мне распечатать результат, только что добавив сюда. –

+0

Следуя вашему предложению, я смог это исправить! –

+0

@ShubhaRajopadhye о, хорошо! – TessellatingHeckler

Смежные вопросы