这个功能中的错误在哪里检查回文?

问题描述 投票:4回答:10

下面给出了检查列表是否是回文的代码。它为983提供了正确的输出。我哪里错了?

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
python palindrome
10个回答
23
投票

一旦出现不匹配,您应该立即返回。此外,您只需要迭代一半的长度:

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]

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

4
投票

这会更容易:

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

1
投票

你的for循环检查所有字符对,无论它是否发现不匹配。因此,在字符串'38113'的情况下,它将返回True,因为在检查'38113'中的最后一个数字相等并且其反转版本'31183'(均等于3,同时等于3)时,flag变量将被设置为True。字符串不是回文)。 所以,你需要在发现不匹配后立即返回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  

此外,正如有人指出使用python的切片会更好 - 看看documentation


0
投票

只是为了记录,以及那些寻找更多算法方法来验证给定字符串是否为回文的人,有两种方法可以实现相同(使用whilefor循环):

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")

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)

0
投票

在我看来这是最优雅的:

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

它也是is_palindrome()函数中的相同代码:

pip install is-palindrome


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

安装与导入时请注意连字符与下划线


-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 ")
© www.soinside.com 2019 - 2024. All rights reserved.