我有一个python教程问题,我无法通过.问题如下:
结束
给定两个字符串,如果其中一个字符串出现在另一个字符串的最末端,则返回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
Run Code Online (Sandbox Code Playgroud)
但错误消息窗口显示:所有公共测试都已通过,但某些私有测试失败.您需要概括您的解决方案.
问题在于我的解决方案?还是我错过了一些事情?
Thi*_*ter 16
那么使用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)
Run Code Online (Sandbox Code Playgroud)
我认为这是你实际上要做的事情:
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 ):]
Run Code Online (Sandbox Code Playgroud)
你的解决方案有几个错误:
s1[-len(s2)]或者通常s1[x]只获得一个角色.所以,如果有的话,你只是比较单个字符,而不是实际的字符序列.您将序列拼接出一个字符串s[x:y](参见手册).s2[-len(s2)]即使是如上所述的冒号,也没有多大意义.您正在s2使用自己的长度访问.但是,由于s2已经是较小的字符串,您可以将其作为一个整体进行比较.a是长比b,没有方式a会更短或相同长度的作为b以后.因此,你应该使你的if结构支持.而不是if ... if ... if ... else做一个链:if ... elif ... elif ... else.然后人们自动知道只有其中一个案例可以申请.if表达式.因为既不是x < y也不y < x等于真,那么x等于y.s1长于s2)并且内部if不适用(s1不结束s2),那么您已经知道该函数应该返回False.因为代码后面的任何其他条件都没有办法说明,所以你应该立即返回False(特别是当有其他代码可能会在以后执行时).如果你有,if x: return True else: return False那么你可以return x.s1[-len(s1)]==s2[-len(s2)]:作为其他前面已经说了,你将有一个问题,当s1且s2是空字符串.len( "" ) = 0如果两个字符串都为空,则两个长度都相同.然后你的代码尝试在空字符串上使用索引范围,这将始终失败(因为没有单个字符).相反,当你已经知道两个字符串具有相同的大小时,只需将它们作为一个整体进行比较.这也有助于防止空字符串.无论如何,如果你不需要自己实现它,你应该真的使用它str.endswith.
| 归档时间: |
|
| 查看次数: |
8362 次 |
| 最近记录: |