【问题标题】:Getting two different values from a recursive function?从递归函数中获取两个不同的值?
【发布时间】:2021-01-11 06:00:42
【问题描述】:

我正在尝试在 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:])

在提示符中进行第一次调用时出现此错误: 回溯(最近一次通话最后): 文件“”,第 1 行,在 ValueError:要解压的值太多(预期为 2)

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

我该怎么办?

【问题讨论】:

  • 您的所有return 语句都需要返回 2 个值,而不仅仅是 1 个。
  • 我建议将您的价值观称为upperlower 而不是onetwo,这样您就可以更好地管理它们。这也可能使您的return 应该是什么更加明显。

标签: python recursion return


【解决方案1】:

你的第一行

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

【讨论】:

  • 感谢您的回答!但是,当我尝试递归解决方案时,我将其视为错误: Traceback (last most recent call last): File "", line 1, in line 124, in string_split line 124, in string_split line 124,在 string_split [上一行重复 6 次以上] ValueError: not enough values to unpack (expected 2, got 0)
  • 第 124 行是什么?
  • ret1, ret2 = string_split(string[1:])
  • 您确定输入正确吗?我刚刚运行了我的代码,我得到了'omhaacers' for first_message'SECRT' for second_message
  • 我已经尝试了好几次,但每次都得到同样的错误:(我什至从你的答案中复制了代码
猜你喜欢
  • 2021-08-04
  • 2019-02-23
  • 2014-07-21
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多