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

时间:2013-10-14 16:41:18

标签: python palindrome

以下是检查列表是否为回文的代码。它为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

10 个答案:

答案 0 :(得分: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]

答案 1 :(得分:4)

这会更容易:

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

答案 2 :(得分:1)

您的for循环会检查所有字符对,无论它是否发现不匹配。因此,在字符串'38113'的情况下,它将返回True,因为在检查'38113'中最后一位数字的相等性后,flag变量将被设置为True版本'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  

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

答案 5 :(得分: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()

答案 6 :(得分: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)

答案 7 :(得分: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

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

答案 8 :(得分:-1)

var input = "Sun, 11 Jun 2017 14:14:37 GMT";
console.log(new Date(input).toJSON().replace(/^.*(\d\d)-(\d\d)-(\d\d).*$/, '$3-$2-$1'));

答案 9 :(得分:-2)

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