python中的回文逻辑:这个程序有什么问题?

时间:2017-08-26 03:43:36

标签: python python-2.7 python-3.x

def isPalindrome(word):

    l = len(word)

    for i in range(l/2):
        if(word[i] != word[i+l-1]):
            return 0

    return 1

def main():

    print("\n\n\tTo Check if the word is a Palindrome\n\n")

    word = raw_input("Enter a word : ")

    if(isPalindrome(word) == 1):
        print("It is a Palindrome")

    elif:
        print("It is not a Palindrome")

main()

在我看来,一切都是正确的。当我输入一个不是回文的单词但是当我进入回文时它会出现这样的错误:

Enter a word : madam
Traceback (most recent call last):
  File "temp.py", line 16, in <module>
  File "temp.py", line 6, in isPalindrome
IndexError: string index out of range

4 个答案:

答案 0 :(得分:2)

检查回文的逻辑应该是:

if(word[i] != word[l-1-i]):
     return 0

如果您使用的是python 2,则可以l/2,但python 3会将结果生成为浮点值。 您的代码似乎在py3中。

需要elif块提供条件。否则,请将其更改为else

答案 1 :(得分:2)

首先出现的问题是:elif: - 如果你正在使用其他 - 如果你应该提供一个条件,那么在这种情况下修复它将它改为else:

其次,if应为:if(word[i] != word[l-i-1]):以使函数有效(检查每个字母是否等于单词中的等效字符。)

第三,不太重要但仍然很重要:保持造型:

  1. 删除多余的大括号
  2. 使用正确的命名约定(snake-case - not camel-case)
  3. 使用True / False作为返回值而不是1/0
  4. 使用楼层划分//(如评论中提到的AChampion)
  5. 完整代码(已修复):

    def is_palindrome(word):
        l = len(word)
        for i in range(l//2):
            if word[i] != word[l-i-1]:
                return False
        return True
    
    
    def main():
        print("\n\n\tTo Check if the word is a Palindrome\n\n")
        word = raw_input("Enter a word : ")
        if is_palindrome(word):
            print("It is a Palindrome")
        else:
            print("It is not a Palindrome")
    
    
    if __name__ == "__main__":
        main()
    

答案 2 :(得分:1)

word[i+l-1]更改为word[l-i-1]

def isPalindrome(word):

    l = len(word)

    for i in range(l // 2):
        if(word[i] != word[l-i-1]):
            return 0

    return 1

我们的目标是让word[l-i-1i计数时倒计时;因此,您需要减去 i 而不是添加它。

另外,我会将l/2更改为l // 2,以便它也适用于Python 3。

希望有所帮助: - )

答案 3 :(得分:1)

你应该舍入l / 2值

def isPalindrome(word):
    l = len(word)
    for i in range(round(l/2)):
        if(word[i] != word[i+l-1]):
            return 0
        return 1

print("\n\n\tTo Check if the word is a Palindrome\n\n")

word = input("Enter a word : ")
if(isPalindrome(word) == 1):
    print("It is a Palindrome")
else:
    print("It is not a Palindrome")