[英]Why does my function work only some of the time?
給定兩個字符串,如果其中一個字符串出現在另一個字符串的末尾,則返回 True,忽略大小寫差異(換句話說,計算不應該“區分大小寫”)。 注意:s.lower() 返回字符串的小寫版本。
def end_other(a, b):
small = min(a, b)
big = max(a, b)
bigcut = big[-len(small):]
if small.lower() == bigcut.lower():
return True
else:
return False
它適用於end_other('AbC', 'HiaBc')
但不適end_other('Hiabc', 'abc')
min(a, b)
返回“字典序較小”的字符串,即在字典中排在第一位的字符串。 您可以改為使用min(a, b, key=len)
來正確獲取較短的字符串,或者可能是以下內容:
def end_other(a, b):
if len(a) > len(b): # make sure a is shorter
a, b = b, a
return b.lower().endswith(a.lower())
print(end_other('AbC', 'HiaBc')) # True
print(end_other('Hiabc', 'abc')) # True
print(end_other('a', 'b')) # False
您使用 min() 和 max() 的方式不會將較短和較長的字符串放在 small 和 big 中,因為這些函數不是比較字符串大小而是比較字符串內容。
您可以讓 zip() 以相反的順序給它字符來處理長度差異:
def end_other(a, b):
return all(a.lower()==b.lower() for a,b in zip(a[::-1],b[::-1]))
print(end_other('AbC', 'HiaBc')) # True
print(end_other('Hiabc', 'abc')) # True
print(end_other('ABCDEF', 'abc')) # False
您還可以計算最短長度並將其應用於比較中的兩個字符串:
def end_other(a, b):
s = min(len(a),len(b))
return a[-s:].lower() == b[-s:].lower()
或者使用 endswith(幾乎讀起來像英語):
def end_other(a, b):
return a.lower().endswith(b.lower()) or b.lower().endswith(a.lower())
def end_other(a, b):
if (a.lower()).endswith(b.lower()):
return True
elif (b.lower()).endswith(a.lower()):
return True
else:
return False
在這里分享我的解決方案!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.