Python递归双字母

2024-04-25 22:51:42 发布

您现在位置:Python中文网/ 问答频道 /正文

所以任务是,你应该写一个递归函数来计算字符串中“双”字母的数量,例如字符串“hmmm”返回1,字符串“hmmmm”返回2,字符串“abb”返回1。我的代码在这里:

def num_double_letters(astr):
    if astr == "" or len(astr) == 1:
        return 0
    elif len(astr) == 2:
        if astr[0] == astr[1]:
            return 1 + num_double_letters(astr[1:])
        else: 
            return 0 + num_double_letters(astr[1:])
    elif astr[0] != astr[1]:
        return 0 + num_double_letters(astr[1:])
    elif astr[0] == astr[1] != astr[2]:
        return 1 + num_double_letters(astr[1:])
    elif astr[0] == astr[1] == astr[2]:
        return 0 + num_double_letters(astr[1:])

我的问题是一个有4个相同字母的字符串=1,而它应该是=2。还有没有更干净的方法?在


Tags: 字符串代码数量lenreturnif字母num
1条回答
网友
1楼 · 发布于 2024-04-25 22:51:42

我觉得你把事情弄得有点复杂。。。一旦字符串的长度是2,就没有必要再深入递归了,而且你想前进2,而不是1,当你找到一个双精度数,我认为你这样做。试试这个:

def num_double_letters(astr):
    if astr == "" or len(astr) == 1:
        return 0
    elif len(astr) == 2:
        if astr[0] == astr[1]:
            return 1
        else: 
            return 0
    elif astr[0] != astr[1]:
        return 0 + num_double_letters(astr[1:])
    elif astr[0] == astr[1]:
        return 1 + num_double_letters(astr[2:])

print(num_double_letters('hmm'))
print(num_double_letters('hmmm'))
print(num_double_letters('hmmmm'))

输出:

^{pr2}$

您可以考虑以下更具代表性和简洁性的方法:

def num_double_letters(astr):
    if len(astr) < 2:
        return 0
    if astr[0] == astr[1]:
        return 1 + num_double_letters(astr[2:])
    return num_double_letters(astr[1:])

相关问题 更多 >