以递归方式反转Python中的字符串

时间:2013-09-23 03:30:40

标签: python string function recursion reverse

对于家庭作业,我必须创建一个反转字符串的递归函数。这就是我目前所拥有的。最后三行代码由教师完成,我们不允许更改它们。当我运行程序时,没有返回任何内容。我认为反转字符串的代码是正确的,但我正在试图弄清楚如何打印结果。

def reverse(input_string):
    if len(input_string) == 0:
         return input_string
    else:
         return reverse(input_string[1:]) + input_string[0]

print "Please enter the string you want to reverse: "
initial_input = raw_input()

reverse(initial_input)

8 个答案:

答案 0 :(得分:3)

您需要打印退货

所以reverse(initial_input)被分配给返回的值,但如果你想打印它,你需要做`print reverse(initial_input)

因为你不能改变最后三个你应该用函数打印而不是返回它。您的instuctor可能希望您这样做以显示递归

在这里,你试试这个稍微复杂一点,但它在功能中反转:

def reverse(text):
    lst = []
    for i in range(0,len(text)):

        lst.append(text[len(text)-(i+1)])

    lst = ''.join(lst)
    print lst

print "Please enter the string you want to reverse: "
initial_input = raw_input()

reverse(initial_input) 

答案 1 :(得分:2)

听起来你只需要在函数中打印反转的字符串?你的讲师是否提供了输出应该是什么样子的实际例子?

也许您应该定义一个单独的函数来执行相反的操作,并让reverse函数只调用这个新函数,然后打印结果。

def actual_reverse(input_string):
    if len(input_string) == 0:
         return input_string
    else:
         return actual_reverse(input_string[1:]) + input_string[0]

def reverse(input_string):
    print actual_reverse(input_string)

print "Please enter the string you want to reverse: "
initial_input = raw_input()

reverse(initial_input)

答案 2 :(得分:1)

根据问题的表述,我假设您的教师不是从文件运行此代码,而是在交互式shell中运行。因此,为了调试,可以在最后一个代码行(调用print函数)之前添加recursive运算符,并且不要忘记之后将其删除。

您只需在控制台中运行python,即可在交互式shell中测试代码。请注意,如果您要立即复制粘贴程序,raw_input()后的空行将变为initial_input值。只需复制粘贴到raw_input的行,然后输入您的字符串,然后调用reverse(initial_input)

更简单的方法是致电python -i your_source.py,然后致电reverse(initial_input)。这里只考虑reverse(initial_input)实际上会运行两次(这里不是问题)。

答案 3 :(得分:0)

def reverse(input_string):
    if len(input_string) == 0:
        return input_string
    else:
        return reverse(input_string[1:]) + input_string[0]

print ("Please enter the string you want to reverse: ")
initial_input = input()
print(reverse(initial_input))

答案 4 :(得分:0)

除了其他人所说的内容之外,您可以从示例代码中进行相同的递归,反之亦然。反过来可以让你在每个角色穿过函数时打印出来。

def reverse(input_string):
    if len(input_string) == 1:
        print input_string[len(input_string) - 1]
        return input_string
    else:
        print input_string[len(input_string) - 1]
        return input_string[len(input_string) - 1] + reverse(input_string[:len(input_string) - 1])

print "Please enter the string you want to reverse: "
initial_input = raw_input()

reverse(initial_input)

它绝对不具备可读性,但它允许您在不改变最后三行的情况下打印出相反的内容。

答案 5 :(得分:0)

您始终可以使用默认值添加第二个参数,以指示是否需要打印结果:

def reverse(input_string, p=True):
    if len(input_string) == 0:
        return input_string
    r = reverse(input_string[1:], False) + input_string[0]
    if p == True:
        print(r)
    return r

或者假设您不需要打印换行符,您可以一次打印一个字符:

def reverse(input_string):
    if len(input_string) == 0:
        return input_string
    r = reverse(input_string[1:]) + input_string[0]
    print(input_string[0], end='')  # version 3 print 'print input_string[0],' in version 2.X
    return r

答案 6 :(得分:0)

这是另一个递归解决方案:

def reverString(data, i):
  if (len(data) + i) == 0:
    return data[0]
  else:
    return data[i] + reverString(data, i-1)

data = 'I am doing great'

print(reverString(data, -1))

控制台的输出:taerg gniod ma I

答案 7 :(得分:0)

简单

def rev_str(s):
    if len(s)==0:
        return ""
    
    sts=s.split(" ")[0]

    return "".join(sts[::-1])+ " "+rev_str(s[len(sts)+1:])