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
答
您检查回文逻辑应该是::
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/0
- 使用地板师
//
(如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")
什么是错的是不是一个合适的问题,你收到了什么错误,你有什么期望输出 - 什么你会得到吗?例如。在'python3'范围内(1/2)''会出错,因为'/'会返回一个'float'(使用''''')是你得到的错误? – AChampion