如何编写检查字符串中某些字符的递归函数?

时间:2017-10-05 18:12:59

标签: python

所以我有这个问题,我需要编写一个递归函数来检查字符串中的某些字符并按特定顺序返回它们。基本上它应该将一个字符串分成两部分,第一部分应该包含小写字母," _"和"。",第二部分应包含大写字母," "和" |"。它应该忽略所有其他角色。

这是我的代码,我对字符串递归的了解非常糟糕:

def split(n):
    if len(n) <= 1:
        return n
    elif (n[0].isalpha() and n[0].lower() == n or "_" == n[0] or "." == n[0]):
        return n[0] + split(n[1:])
    elif (n[0].isalpha() and n[0].upper() == n) or n[0] == " " or n[0] == "|":
        return n
    else:
        return n[0] + split(n[1:])

例如,如果我写split("'lMiED)teD5E,_hLAe;Nm,0@Dli&Eg ,#4aI?rN@T§&e7#4E #<(S0A?<)NT8<0'"))

它应该返回('lite_hemligare', 'MEDDELANDE INTE SANT')

1 个答案:

答案 0 :(得分:3)

恕我直言,如果你让函数返回一个总是带有2个字符串的元组,它会更容易。然后,您可以根据触发的规则附加到元组的第一个或第二个字符串。实际上,该功能可能如下所示:

def separate(p, idx=0):
    if idx == len(p):
        return '', ''

    l1, l2 = separate(p, idx + 1)

    item = p[idx]

    if (item.isalpha() and item.lower() == item) or "_" == item or "." == item:
        l1 = item + l1
    elif (item[0].isalpha() and item[0].upper() == item) or item[0] == " " or item[0] == "|":
        l2 = item + l2
    return l1, l2

这样,结果正是您所寻找的。