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 = raw_input()

reverse(initial_input)
4

8 回答 8

3

你需要打印退货

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

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

在这里你去试试这个它有点复杂,但它在函数中反转:

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) 
于 2013-09-23T03:32:32.027 回答
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)
于 2013-09-23T03:53:14.230 回答
1

根据问题的表述,我假设您的讲师不会从文件中运行此代码,而是在交互式外壳中运行。print因此,出于调试的目的,请随意在最后一行代码(函数调用)之前添加操作符recursive,之后不要忘记删除它。

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

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

于 2013-09-23T05:39:40.027 回答
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

于 2014-10-29T10:56:32.310 回答
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)

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

于 2013-09-23T04:11:19.933 回答
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
于 2013-09-23T04:22:32.033 回答
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))
于 2013-09-23T03:40:16.280 回答
0

简单地

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

    return "".join(sts[::-1])+ " "+rev_str(s[len(sts)+1:])
于 2021-05-31T16:16:33.810 回答