首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python教程问题:以函数结尾

Python教程问题:以函数结尾
EN

Stack Overflow用户
提问于 2011-01-23 23:59:50
回答 6查看 8.7K关注 0票数 4

我有一个蟒蛇教程的问题,我无法通过。问题如下:

结尾

给定两个字符串时,如果其中一个字符串出现在另一个字符串的末尾,则返回True,忽略大小写差异(换句话说,计算不应该“区分大小写”)。

我的解决方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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  

但是错误消息窗口显示:所有公共测试都通过了,但是一些私有测试失败了。你需要概括你的解决方案。

我的解决办法是什么?还是我错过了什么?

EN

回答 6

Stack Overflow用户

发布于 2011-01-24 00:04:09

如何使用python的内置str.endswith()方法?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)
票数 17
EN

Stack Overflow用户

发布于 2011-01-24 00:41:05

我想这就是你真正想做的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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已经是较小的字符串,所以您可以将其作为一个整体进行比较。
  • 当您的外部is之一匹配某个情况时,没有任何其他外部情况可以跟随。例如,如果ab长,那么a就不可能更短,以后也不可能和b一样长。因此,您应该使您的if结构支持该结构。而不是if ... if ... if ... else,创建一个链:if ... elif ... elif ... else。当您这样做时,您还可以关闭最后一个

表达式。因为当y.

  • You和x < y都不等于true时,x也需要改变从函数内部返回的方式。到目前为止,您在每个外部if的情况下都有一个条件退出。现在,如果第一个if大小写应用(即s1s2长)和内部if不适用(s1不以s2结尾),那么您已经知道函数应该返回False。因为代码后面的任何其他条件都不可能不这样说,所以您应该立即返回False (特别是当有其他代码可能稍后执行时)。当您有了return x.
  • s1[-len(s1)]==s2[-len(s2)]:时,您就可以像前面所说的那样,只使用if x: return True else: return False,当s1s2是空字符串时,您就会遇到问题。len( "" ) = 0,如果两个字符串都是空的,那么两个字符串的长度都是相同的。然后,您的代码尝试在空字符串上使用索引范围,这将始终失败(因为没有一个字符)。相反,当您已经知道两个字符串的大小相同时,只需将两者作为一个整体进行比较。这也有助于防止空字符串。

无论如何,如果您不需要自己实现它,那么就应该真正地使用str.endswith

票数 7
EN

Stack Overflow用户

发布于 2011-01-24 00:02:16

使用空字符串进行比较将发生内爆。然后使用.endswith()代替。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4779790

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文