我有一个蟒蛇教程的问题,我无法通过。问题如下:
以结尾
给定两个字符串时,如果其中一个字符串出现在另一个字符串的末尾,则返回True,忽略大小写差异(换句话说,计算不应该“区分大小写”)。
我的解决方案:
def end_other(a,b):
s1=a.lower()
s2=b.lower()
if len(s1)>len(s2):
if s1[-len(s2)]==s2[-len(s2)]:
return True
if len(s1)<len(s2):
if s1[-len(s1)]==s2[-len(s1)]:
return True
if len(s1)==len(s2):
if s1[-len(s1)]==s2[-len(s2)]:
return True
else:
return False
但是错误消息窗口显示:所有公共测试都通过了,但是一些私有测试失败了。你需要概括你的解决方案。
我的解决办法是什么?还是我错过了什么?
发布于 2011-01-24 00:04:09
如何使用python的内置str.endswith()
方法?
def end_other(a, b):
a_lower = a.lower()
b_lower = b.lower()
return a_lower.endswith(b_lower) or b_lower.endswith(a_lower)
发布于 2011-01-24 00:41:05
我想这就是你真正想做的:
def end_other ( a, b ):
a = a.lower()
b = b.lower()
if a == b:
return True
elif len( a ) > len( b ):
return b == a[-len( b ):]
else:
return a == b[-len( a ):]
你的解决方案中有几个错误:
s1[-len(s2)]
或一般情况下,s1[x]
只得到一个字符。所以,如果有的话,你只是比较一个字符,而不是一个实际的字符序列。您可以通过manual).s2[-len(s2)]
,将字符串中的序列从s[x:y]
中拼接出来(即使如上面所解释的那样,请参见冒号),这没有多大意义。您正在使用自己的长度访问s2
。但是由于s2
已经是较小的字符串,所以您可以将其作为一个整体进行比较。a
比b
长,那么a
就不可能更短,以后也不可能和b
一样长。因此,您应该使您的if结构支持该结构。而不是if ... if ... if ... else
,创建一个链:if ... elif ... elif ... else
。当您这样做时,您还可以关闭最后一个表达式。因为当y
.
x < y
都不等于true时,x
也需要改变从函数内部返回的方式。到目前为止,您在每个外部if的情况下都有一个条件退出。现在,如果第一个if大小写应用(即s1
比s2
长)和内部if不适用(s1
不以s2
结尾),那么您已经知道函数应该返回False。因为代码后面的任何其他条件都不可能不这样说,所以您应该立即返回False (特别是当有其他代码可能稍后执行时)。当您有了return x
.s1[-len(s1)]==s2[-len(s2)]
:时,您就可以像前面所说的那样,只使用if x: return True else: return False
,当s1
和s2
是空字符串时,您就会遇到问题。len( "" ) = 0
,如果两个字符串都是空的,那么两个字符串的长度都是相同的。然后,您的代码尝试在空字符串上使用索引范围,这将始终失败(因为没有一个字符)。相反,当您已经知道两个字符串的大小相同时,只需将两者作为一个整体进行比较。这也有助于防止空字符串。无论如何,如果您不需要自己实现它,那么就应该真正地使用str.endswith
。
发布于 2011-01-24 00:02:16
使用空字符串进行比较将发生内爆。然后使用.endswith()
代替。
https://stackoverflow.com/questions/4779790
复制相似问题