Python 从递归函数中获取两个不同的值?
我试图在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
>>> 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'
。我尝试了好几次,但每次都出现相同的错误:(我甚至从你的答案中复制了密码