python中的回文程序

Palindrome program in python

P.S:我是 python(和一般编程)的新手,但是,我有一个关于检查单词是否为回文的问题。这是我的代码:

def checkPal(word):
    newWord = ""
    for j in range(len(word)-1, 0):
        newWord = newWord + word[j]
        print(newWord) #this doesn't print anything
    if(newWord==word):
        print("Palandrome!!")
    else:
        print("sorry")

所以这不会引发任何错误,但是,它也不起作用!我知道还有其他方法可以做到这一点,例如:

str(n) == str(n)[::-1]

这很有魅力。但我只想知道我的代码有什么问题。我似乎找不到解决办法。我也单独尝试过项目分配:

Word = ""
toAdd = "LetsTryThis"
Word = Word + toAdd[0]
print(Word)

输出:

L

输出符合预期,但这在我的 checkPal 函数的 for 循环中似乎不起作用。见评论。

感谢您的帮助!

如果您想要一个倒序的范围(初始值大于最终值),您需要指定负步长(在您的情况下为 -1)

range(5,0)       # doesn't work
[]

range(5,0,-1)    # works
[5, 4, 3, 2, 1]

但这是反转字符串的低效方法,请改用 word[::-1](效率会更高)

if word == word[::-1]:
    print('Palindrome')
else:
    print('Not a palindrome')

但是如果word很长,要倒过来再把整个词和原词进行比较,就需要费一番功夫了。

相反,您可以从 0len(word)/2 迭代一次,然后将第一个元素与最后一个元素进行比较,将第二个元素与倒数第二个元素进行比较,依此类推...直到其中一个失败,否则这是一个回文。

def is_palindrome(word):
    is_palindrome = True
    for i in range(len(word)/2):
        if word[i] != word[-i-1]:
            is_palindrome = False
            break

    # you can print if it's a palindrome:
    if is_palindrome:
        print('Palindrome')
    else:
        print('Not a palindrome')

    # or just return a boolean answer
    return is_palindrome

# test cases
is_palindrome('adda')    # even palindrome
is_palindrome('adfda')   # odd palindrome
is_palindrome('asda')    # even non-palindrome
is_palindrome('adfsa')   # odd non-palindrome