为了账号安全,请及时绑定邮箱和手机立即绑定

从递归函数中获取两个不同的值?

从递归函数中获取两个不同的值?

跃然一笑 2023-09-05 20:27:24
我正在尝试在python中创建一个函数,将一个字符串拆分为两个字符串,其中第一个字符串包含所有小写字母+一些其他特殊字符,第二个字符串包含所有大写字母+特殊字符。重点是能够输入:>>> first_message,second_message=string_split("SomEChaRacTers")>>> print(first_message, second_message)打印结果。这就是我现在所拥有的:def string_split(string):    first_message_signs = "_."    second_message_signs = " |"    one = ""    two = ""    if len(string) == 0:        return string        if string[0].islower() or string[0] in first_message_signs:        one += string[0] + string_split(string[1:])        return one        elif string[0].isupper() or string[0] in second_message_signs:        two += string[0] + string_split(string[1:])        return two    else:        return string_split(string[1:])在提示中进行第一次调用时出现此错误: Traceback (most最近的调用最后): File "", line 1, in ValueError: Too much values to unpack (expected 2)当我尝试仅使用 message_one 时,我得到一个字符串中的所有字符。我应该怎么办?
查看完整描述

1 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

你的第一行


first_message,second_message=string_split("SomEChaRacTers")

期望string_split返回两个值。然而,你的函数只返回一个。


你想要的是


def string_split(string):

    first_message_signs = "_."

    second_message_signs = " |"

    one = ""

    two = ""

    if len(string) == 0:

        return one, two

    

    if string[0].islower() or string[0] in first_message_signs:

        one += string[0]

    elif string[0].isupper() or string[0] in second_message_signs:

        two += string[0]


    ret1, ret2 = string_split(string[1:])

    one += ret1

    two += ret2


    return one, two

顺便说一句,没有令人信服的理由需要string_split递归。尝试这个:


def string_split(string):

    first_message_signs = "_."

    second_message_signs = " |"


    one = ''.join(c for c in string if c.islower() or c in first_message_signs)

    two = ''.join(c for c in string if c.isupper() or c in second_message_signs)


    return one, two


查看完整回答
反对 回复 2023-09-05
  • 1 回答
  • 0 关注
  • 69 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信