Python中的回文程序

时间:2017-03-22 16:14:45

标签: python palindrome

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 个答案:

答案 0 :(得分:2)

如果您想要一个反向顺序的范围(初始值大于最终值),您需要指定一个负步(在您的情况下为-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很长,则需要花费很多精力来反转它,然后将整个单词与原始单词进行比较。

相反,您只需从0迭代一次到len(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