簡體   English   中英

為什么我的 function 只能在某些時候工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM