在python中递归地连接字符串

时间:2014-12-03 18:18:31

标签: python

我有一个递归函数,它连接一个字符串(并做一些逻辑),当逻辑完成时,它完成函数并将结果返回给变量。

(我的功能非常大,所以我简化了它。

  import random
  def test(str):
      l = len(str)
      if l >= 10:
          return 0
      str += random.choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
      test(str)

  str = ''
  test(str)
  print str

当我在我的功能中“打印str”时,它可以工作,但是:

r
rV
rVG
rVGF
rVGFK
rVGFKa
rVGFKat
rVGFKatY
rVGFKatYN
rVGFKatYNY

但是当我打印str(代码的最后一行)时,我得到一个空字符串

2 个答案:

答案 0 :(得分:2)

字符串在Python中是不可变的,如果您希望函数实际修改它的输入,则使用例如return语句或字符数组。

这一行:

str += random.choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')

将初始化新对象str并为其指定str + random.(...)。因此,传递给函数的实际对象基本上被放弃,后来被垃圾收集。

这是你正在寻找的东西,虽然它不是最好的实现:

import random
def test(input_string):
    l = len(input_string)                                                   
    if l >= 10:
        return input_string
    input_string += random.choice('abcdefghijklmnopqrstuvwxyz'
                                  'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
    return test(input_string)                                               

input_string = ''                                                           
input_string = test(input_string)                                           
print(input_string)

答案 1 :(得分:-4)

全局vs局部变量?尝试全局变量。