Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中递归地反转字符串_Python_String_Function_Recursion_Reverse - Fatal编程技术网

在Python中递归地反转字符串

在Python中递归地反转字符串,python,string,function,recursion,reverse,Python,String,Function,Recursion,Reverse,对于家庭作业,我必须创建一个反转字符串的递归函数。这是我目前拥有的。最后三行代码是由讲师编写的,我们不允许更改它们。当我运行程序时,不会返回任何内容。我认为反转字符串的代码是正确的,但我正在尝试找出如何打印结果 def reverse(input_string): if len(input_string) == 0: return input_string else: return reverse(input_string[1:]) + inp

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

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)
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)

你需要打印报税表

因此,
reverse(初始输入)
被分配给返回值,但是如果您想要打印它,您需要执行`打印反向(初始输入)`

由于无法更改最后三个,因此应使用函数打印,而不是返回函数。您的指令可能希望您这样做以显示递归

在这里,你可以试试这个。它有点复杂,但它在函数中是相反的:

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) 

你需要打印报税表

因此,
reverse(初始输入)
被分配给返回值,但是如果您想要打印它,您需要执行`打印反向(初始输入)`

由于无法更改最后三个,因此应使用函数打印,而不是返回函数。您的指令可能希望您这样做以显示递归

在这里,你可以试试这个。它有点复杂,但它在函数中是相反的:

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) 

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

也许您应该定义一个单独的函数来执行反向操作,让
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)
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)

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

也许您应该定义一个单独的函数来执行反向操作,让
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)
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)

除了其他人所说的之外,您还可以从示例代码中执行相同的递归,但反向递归除外。反向操作将允许您在每个字符通过函数时打印它

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)

它肯定不那么可读,但它允许您打印出相反的内容,而无需更改最后三行。

除了其他人所说的内容之外,您还可以从示例代码中执行相同的递归,除了相反的内容。反向操作将允许您在每个字符通过函数时打印它

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)

它的可读性肯定不高,但它允许您打印出相反的结果,而无需更改最后三行。

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

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

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

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

根据问题的表述,我假设您的讲师不会从文件中运行此代码,而是在交互式shell中运行。因此,为了便于调试,可以在最后一行代码(调用
递归
函数)之前添加
print
操作符,并且不要忘记在之后删除它

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


更简单的方法是调用
python-i your_source.py
,然后调用
reverse(初始输入)
。这里只需考虑<代码>反转(RealAlxPin)< /C> >两次(这里不是问题)。

< P>根据问题的提出,我假定您的指导者将不从文件运行这个代码,而是在交互式shell中运行。因此,为了便于调试,可以在最后一行代码(调用
递归
函数)之前添加
print
操作符,并且不要忘记在之后删除它

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


更简单的方法是调用
python-i your_source.py
,然后调用
reverse(初始输入)
。这里只需考虑<代码>反向(RealAlxPin)< /C> >两次运行(这里不是问题)。

< P>这里是另一个递归解决方案:

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

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

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

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

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


函数的第二行(第一行)也缺少了一个
,我把它添加到了我的答案中,当我在这里输入代码时,我在最后一个括号中漏掉了它,所以这并没有给我带来问题。当我尝试在我的函数中打印(用打印替换返回值)时,我得到以下错误:TypeError:不支持+:“NoneType”和“str”的操作数类型。哦,好的,我知道如果你不能更改最后三行,你可能需要采取不同的方法。第二行(第一行)也缺少一个
函数行我把它添加到我的答案中,当我在这里输入代码时,我在最后一个括号中遗漏了它,所以这并没有给我带来问题。当我尝试在我的函数中打印(用打印替换返回)时,我