Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从递归函数中获取两个不同的值?_Python_Recursion_Return - Fatal编程技术网

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

Python 从递归函数中获取两个不同的值?,python,recursion,return,Python,Recursion,Return,我试图在python中创建一个函数,将一个字符串拆分为两个字符串,其中第一个包含所有小写字母+一些其他特殊字符,第二个包含所有大写字母+特殊字符 重点是能够键入: >>> first_message,second_message=string_split("SomEChaRacTers") >>> print(first_message, second_message) def string_split(string): firs

我试图在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:])
打印结果

这就是我现在拥有的:

>>> 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:])
在提示符中进行第一次调用时出现此错误: 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 ValueError:要解压缩的值太多(应为2个)

当我尝试只使用message_one时,我会将所有字符放在一个字符串中

我该怎么办?

你的第一行

first_message,second_message=string_split("SomEChaRacTers")
期望
string\u 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\u 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

所有
return
语句都需要返回2个值,而不是仅返回1个值。我建议调用值
upper
lower
,而不是
one
two
,以便更好地管理它们。这也可能使您的
返回值
更加明显。谢谢您的回答!但是,当我尝试递归解决方案时,我得到一个错误:回溯(最近一次调用):文件“”,第1行,第124行,第124行,第124行,第124行,第124行,第124行,第124行,第124行(预期为2,得到0)第124行是什么?ret1,ret2=string\u split(string[1:])你确定键入的是正确的吗?我刚刚运行了我的代码,我得到了
第一条消息的
'omhaacers'
第二条消息的
'SECRT'
。我尝试了好几次,但每次都出现相同的错误:(我甚至从你的答案中复制了密码