endswith function:另一端的一个字符串和Python的Vice Versa。问题与解决方案协助?

时间:2012-11-17 19:07:14

标签: python python-3.x

不是有史以来最伟大的头衔......无论如何你好!我目前正在回答这个问题,但我没有遇到所有例外情况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

我的期望是错的:


我使用的网站并不是因为它的确切答案而闻名......但我知道我的代码中很可能存在缺陷。如果您有任何建议,请告诉我们!

4 个答案:

答案 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)