为什么我编写的end_other字符串尾缀判断函数仅部分用例生效?
问题原因
你的代码核心错误在于min(a, b)、max(a, b)的取值逻辑不符合预期:Python中字符串的默认大小比较是按字典序逐位比对ASCII码值,不是按照字符串的长度比较。
以运行失败的end_other('Hiabc', 'abc')为例:
- 首字符
H的ASCII码为72,a的ASCII码为97,因此min('Hiabc', 'abc')实际返回的是长度更长的'Hiabc',max返回的是长度更短的'abc' - 后续执行
big[-len(small):]即'abc'[-5:],Python字符串切片下标越界时会返回完整字符串,得到结果'abc' - 最终比对
'Hiabc'.lower()和'abc',结果为False,和预期不符。
修复方案
只需要修改min、max的比对规则,指定按字符串长度取值即可,优化后代码如下:
def end_other(a, b): small = min(a, b, key=len) big = max(a, b, key=len) return small.lower() == big[-len(small):].lower()
内容的提问来源于stack exchange,提问作者user16712533
相关产品推荐
相关产品推荐

