Where's the bug in this function to check for palindrome?

血红的双手。 提交于 2019-12-01 04:55:34

问题


Given below is the code to check if a list is a palindrome or not. It is giving correct output for 983. Where am I going wrong?

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

回答1:


You should return as soon as there is a mismatch. Also, you just need to iterate till half the length:

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

BTW, you don't need that loop. You can simply do:

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



回答2:


This would be easier:

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



回答3:


Your for loop checks all pairs of characters, no matter if it found mismatch or not. So, in case of string '38113' it will return True, because the flag variable will be set to True after the check for equality of last digit in '38113' and its reversed version '31183' (both equal to 3, while the string isn't a palindrome).
So, you need to return False right after you've found mismatch; if you checked all the characters and didn't find it - then return True, like so:

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

Also, as someone pointed out it'll be better to use python's slices - check out the documentation.




回答4:


Just for the record, and for the ones looking for a more algorithmic way to validate if a given string is palindrome, two ways to achieve the same (using while and for loops):

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

And....the second one:

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



回答5:


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



回答6:


# 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()



回答7:


this would be much easier:

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)



回答8:


Here in my opinion is the most elegant:

def is_palindrome(s):
    if s != '':
        if s[0] != s[-1]:
            return False
        return is_palindrome(s[1:-1])
    return True

it's also the same code in the is_palindrome() function:

pip install is-palindrome


>>> from is_palindrome import is_palindrome
>>> x = "sitonapanotis"
>>> y = is_palindrome(x)
>>> y
True

Take care to note the hyphen vs underscore when installing vs. importing




回答9:


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



回答10:


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


来源:https://stackoverflow.com/questions/19365008/wheres-the-bug-in-this-function-to-check-for-palindrome

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!