不是有史以来最伟大的头衔......无论如何你好!我目前正在回答这个问题,但我没有遇到所有例外情况D:任何帮助都会很棒! (再次抱歉这个糟糕的标题)。
问题:
结束 给定两个字符串,如果其中一个字符串出现在另一个字符串的最末端,则返回True,忽略大小写差异(换句话说,计算不应该是“区分大小写”)。
示例/测试:
>>> end_other('Hiabc', 'abc')
True
>>> end_other('AbC', 'HiaBc')
True
>>> end_other('abc', 'abXabc')
True
测试结果:
Call Expected Received Correct
end_other('Hiabc', 'abc') True True true
end_other('AbC', 'HiaBc') True True true
end_other('abc', 'abXabc') True False false #Cond. Not being met
end_other('Hiabcx', 'bc') False False true
end_other('abc', 'abc') True True true
end_other('xyz', '12xyz') True True true
end_other('yz', '12xz') False False true
end_other('ab', 'ab12') False False true
(抱歉格式化失败)
我的代码:
def end_other(s1,s2):
s1 = s1.upper()
s2 = s2.upper()
if s1[2:6] == s2:
return True
elif s2[2:6] == s1:
return True
elif s2 == s1:
return True
else:
return False
我的期望是错的:
我使用的网站并不是因为它的确切答案而闻名......但我知道我的代码中很可能存在缺陷。如果您有任何建议,请告诉我们!
答案 0 :(得分:5)
你有什么理由不能使用内置功能吗?
def end_other(s1, s2):
s1 = s1.upper()
s2 = s2.upper()
return s1.endswith(s2) or s2.endswith(s1)
使用任意切片的代码没有多大意义。
答案 1 :(得分:1)
类似的东西,使用str.rfind()
:
In [114]: def end(s1,s2):
s1=s1.lower()
s2=s2.lower()
if s1 in s2 and s2.rfind(s1)+len(s1) == len(s2):
return True
elif s2 in s1 and s1.rfind(s2)+len(s2) == len(s1):
return True
return False
.....:
In [115]: end('Hiabc','abc')
Out[115]: True
In [116]: end('abC','HiaBc')
Out[116]: True
In [117]: end('abc','abxabc')
Out[117]: True
In [118]: end('abc','bc')
Out[118]: True
In [119]: end('ab','ab12')
Out[119]: False
答案 2 :(得分:0)
或者您可以尝试使用String方法:'endswith'and('lower'或'upper'):
def end_other(a, b):
return ( b.lower().endswith(a.lower()) or a.lower().endswith(b.lower()))
答案 3 :(得分:0)
def end_other(a, b):
long_str = a.lower()
short_str = b.lower()
return long_str.endswith(short_str) or short_str.endswith(long_str)