2015-10-25 3 views
-2

Мне нужно написать функцию, которая определяет, является ли данная строка палиндром. Вот то, что я написал до сих пор:Запись функции, которая проверяет, является ли строка палиндром

def isPalindrome(string): 
    found = False 
    for i in range(len(string)): 
     if string[i] == string[len(string) - 1 - i]: 
      found = True 

    if found == True: 
     print("Inserted string is a palindrome. ") 
    else: 
     print("Inserted string is not a palindrome. ") 

    return 

Я перебирать струны, и проверьте, вперед и назад итерация дает равные символы. Но если я применил эту программу, выполнив isPalindrome («привет»), он говорит, что это палиндром. Это не дает мне правильный результат. Может кто-нибудь, пожалуйста, укажет на любую ошибку, которую я сделал, чтобы я мог учиться на этом.

+0

Проверьте, не совпадают ли буквы. Как только это произойдет, сделайте вывод, что это не палиндром. – uselpa

+0

Вы устанавливаете значение Истина, если * любые * зеркальные пары символов совпадают. Вместо этого вы хотите, чтобы True соответствовала * всем * зеркальным парам. Поэтому инициализируйте его True, затем в цикле установите его в False, если они * не совпадают *. –

ответ

2

Вы установили found в true, как только вы найдете любой символ, соответствующий символу 'mirror'. Например, для слова с нечетным числом символов, которое всегда будет истинным (средний символ равен среднему символу), например, но другие слова также генерируют ложное совпадение. Возьмите слово winner, например, два n s находятся в зеркальных позициях, и ваша функция провозгласит его палиндром, хотя это явно не так.

Вместо установки found к истинному, выход рано, если вы нашли несоответствие :

found = True 
for i in range(len(string)): 
    if string[i] != string[len(string) - 1 - i]: 
     found = False 
     break 

Так вы начинаете в предположении, что это палиндром, и вы выходите, когда вы найдете доказательства обратного.

Обратите внимание, что вы можете остановить проверку, когда вы проверили половину строки:

for i in range((len(string) + 1) // 2): 
    if string[i] != string[len(string) - 1 - i]: 
     found = False 
     break 

или вы могли бы просто проверить, если строка равна реверсе; [::-1] дает вам строку с обратным адресом:

string == string[::-1] 
+0

Спасибо. Это было очень ясно. – Kamil

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