2013-10-14 2 views
4

Ниже приведен код, чтобы проверить, является ли список палиндром или нет. Он дает правильный результат для 983. Где я иду не так?Функция Python для проверки на palindrome

def palindrome(num): 
    flag=0 
    r=num[::-1] 
    for i in range (0, len(num)-1): 
     if(r[i]==num[i]): 
      flag=1 
     else: 
      flag=0 
    return flag 
+0

Что происходит, когда вы запускаете программу? Вы получили сообщение об ошибке? Если да, то какая ошибка? Если нет, то как результат отличается от ожидаемого? –

ответ

21

Вы должны вернуться, как только возникнет несоответствие. Кроме того, вам просто нужно перебирать до половины длины:

def function(...): 
    ... 
    for i in range (0, (len(num) + 1)/2): 
     if r[i] != num[i]: 
      return False 
    return True 

Кстати, вам не нужен этот цикл. Вы можете просто сделать:

def palindrome(num): 
    return num == num[::-1] 
+0

Можете ли вы объяснить, что это значит? num [:: - 1] –

+2

@ImtiazAhmad Изменяет последовательность 'num'. Следите за расширенным обозначением среза. –

4

Это было бы проще:

def palindrome(num): 
    if num[::-1] == num: 
     return True 
    else: 
     return False 
+5

Почему бы не один-лайнер? def palindrome (num): return num [:: - 1] == num – Ishpeck

+6

Я ненавижу 'if True: return True ...' –

+0

@JoranBeasley: Я думаю, это просто стиль личного кодирования, я думаю, что это более понятно. – Synthetica

0

Ваш for проверяет цикл все пары символов, независимо от того, если он нашел несоответствие или нет. Таким образом, в случае строки «38113» она вернет True, так как переменная flag будет установлена ​​на True после проверки на равенство последней цифры в «38113» и ее обратной версии «31183» (оба равны 3, тогда как строка не является палиндром).
Итак, вам нужно вернуть False сразу после того, как вы обнаружили несоответствие; если вы проверили все символы и не нашел - то вернуть True, например, так:

def palindrome(num): 
    r = num[::-1] 
    for i in range (0, len(num)-1): 
     if(r[i] != num[i]): 
      return False 
    return True 

Кроме того, как кто-то отметил, что это будет лучше использовать ломтики питона - проверить documentation.

-2
def palindrome(a): 
    a=raw_input('Enter :') 
    b=a[::-1] 
    return a==b 
+2

Вы должны добавить объяснения, почему это решение ... –

0

Просто для записи, и для тех, которые ищут более алгоритмической способ проверить, если данная строка является палиндром, два пути для достижения того же (с помощью while и for петель):

def is_palindrome(word): 

    letters = list(word)  
    is_palindrome = True 
    i = 0 

    while len(letters) > 0 and is_palindrome:  
     if letters[0] != letters[-1]: 
      is_palindrome = False 
     else: 
      letters.pop(0) 
      if len(letters) > 0: 
       letters.pop(-1) 

    return is_palindrome 

И .... вторая:

def is_palindrome(word): 

    letters = list(word) 
    is_palindrome = True 

    for letter in letters: 
     if letter == letters[-1]: 
      letters.pop(-1) 
     else: 
      is_palindrome = False 
      break 

    return is_palindrome 
0
str1=str(input('enter string:')) 
save=str1 
revstr=str1[::-1] 
if save==revstr: 
    print("string is pailandrom") 
else: 
    print("not pailadrom") 
+1

Пожалуйста, добавьте пояснения к вашему коду. Просто код не помогает, почему решение OP не работает. –

0
# We are taking input from the user. 
# Then in the function we are reversing the input i.e a using 
# slice  [::-1] and 
# storing in b 
# It is palindrome if both a and b are same. 

a = raw_input("Enter to check palindrome:") 
def palin(): 
    #Extended Slices to reverse order. 
    b = a[::-1] 
    if a == b: 
     print "%s is palindrome" %a 
    else: 
     print "%s is not palindrome" %a 
palin() 
0

это было бы гораздо проще:

def palindrome(num): 
    a=num[::-1] 
    if num==a: 
     print (num,"is palindrome") 
    else: 
     print (num,"is not palindrome") 

x=input("Enter to check palindrome:") 
palindrome(x) 
-1
a="mom" 
b='mom'[::-1] # reverse the string 
if a==b: # if original string equals to reversed 
    print ("palindrome ") 
else: 
    print ("not a palindrome ") 
+1

Вы должны добавить комментарий о том, как вы обращаетесь к проблеме op. Некоторое объяснение вашего кода также может быть полезным. – stephenmuss

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