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

问题描述:

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

在我看来,在程序中一切正常。python中的回文逻辑:这个程序有什么问题?

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

什么是错的是不是一个合适的问题,你收到了什么错误,你有什么期望输出 - 什么你会得到吗?例如。在'python3'范围内(1/2)''会出错,因为'/'会返回一个'float'(使用''''')是你得到的错误? – AChampion

您检查回文逻辑应该是::

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

没关系的,当我输入一个单词是不是回文,但是当我进入一个回文它给出这样的错误它去好要做l/2如果你在python 2上,但是python 3会产生结果作为浮点值。 你的代码似乎在py3中。

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

这是错误的

的第一件事是:elif: - 如果你正在使用别的,如果你要提供一个条件,在这种情况下,修复其将其更改为else:

其次,if应该是:if(word[i] != word[l-i-1]):为了使该功能起作用(检查每个字母是否等于该字中的等同字母)。

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

  1. 去除多余的括号
  2. 使用正确的命名约定(蛇情况 - 没有驼峰)
  3. 使用真/假的返回值,而不是1/0
  4. 使用地板师//(如AChampion在评论中提到的)

完整代码(固定):

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() 
+1

虽然看起来OP使用的是Py2,但使用适用于py2和3的'range(l // 2)'可能更安全。 – AChampion

变化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-1倒计时,而i向上计数;因此,您需要减去i而不是添加它。

此外,我会将l/2更改为l // 2,这样它也可以在Python 3中使用。

希望帮助:-)

你应该四舍五入的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")