回文是一个向前和向后读取相同的字符串。回文的例子包括“lol”,“abba”,“雷达”和“pickle elkcip”。指出它是否在以下文档字符串中描述的所有情况下都有效:'''如果字符串s是回文,则返回True,否则返回False。'''
def palindrome2(s):
n = len(s)
pal = True
for i in range(n/2):
if s[i] == s[n-i-1]:
pal = True
else:
pal = False
return pal
我不明白为什么这个功能不起作用。对我来说,似乎功能正常。显然,布尔值被滥用,但我不明白上面的布尔值是如何使用得不好的。有人可以向我解释一下吗?
答案 0 :(得分:8)
为了好玩,您还可以尝试更简单的方法:
def palindrome(s):
return s[::-1] == s
(向读者讲解其工作原理)
答案 1 :(得分:6)
循环体被编码的方式pal
的值可能会在True
和False
之间反复变化,具体取决于给定的一对字符是否恰好匹配特别是迭代。
最好检查不等式,将布尔变量pal
设置为False
,然后立即退出循环。
这样的事情:
def palindrome2(s):
n = len(s)
pal = True
for i in range(n/2)
if s[i] != s[n-i-1]: # the moment it's false
pal = False # set pal and
break # drop out of the loop
return pal
或者,不使用布尔变量:
...
for i in range(n/2)
if s[i] != s[n-i-1]: # the moment it's false
return False # exit the function by returning False
return True # otherwise return True
答案 2 :(得分:3)
您始终会检查每个字符。一旦你明确知道结果,你需要立即返回。
答案 3 :(得分:3)
@ ulmangt的解决方案非常聪明,但我不那么神秘:
def palindrome(s):
return all(( s[i] == s[-(i+1)] for i in range(len(s)/2) ))
至少它只进行了一半的比较; - )