首页 > 解决方案 > 返回函数外

问题描述

有一个语法错误,说我在函数之外返回

我尝试了人们使用那里的代码解决相同问题的所有可能解决方案,但我仍然遇到相同的错误

错误在行返回结果的第 32 行

问题介绍 在这个问题中,我们提出一个简单的问题:一个字符串作为另一个字符串的子字符串出现多少次?回想一下子串的不同出现可以相互重叠。例如,ATA 在 CGATATATCCATAG 中出现了 3 次。

问题描述任务。查找字符串中所有出现的模式。

输入格式。字符串和 .

约束。1≤|| ≤ 106;1≤|| ≤ 106;两个字符串都在 A、C、G、T 上。

示例 1. 输入:输出:1 12 4 1.5 2 4 4 24 TACG GT 解释:模式比文本长,因此在文本中没有出现。示例 2. 输入:输出:02 解释:模式出现在位置 1 和 3(并且这两个出现相互重叠)。示例 3. 输入:输出:139 解释:模式出现在文本中的位置 1、3 和 9。ATA ATATA ATAT GATATATGCATATACTT

# python3
import sys


 def compute_prefix_function(pattern):
s = [0] * len(pattern)
border = 0

  for i in range(1, len(pattern)):
    while (border > 0) and (pattern[i] != pattern[border]):
        border = s[border - 1]
    if pattern[i] == pattern[border]:
        border = border + 1
    else:
        border = 0
    s[i] = border

return s


def find_pattern(pattern, text):
S = pattern + '$' + text
s = compute_prefix_function(S)
result = []

p = len(pattern)

for i in range(p + 1, len(S)):
    if s[i] == p:
        result.append(i - 2 * p)


 return result


if __name__ == '__main__':

pattern = sys.stdin.readline().strip()

text = sys.stdin.readline().strip()

 result = find_pattern(pattern, text)

 print(" ".join(map(str, result)))

标签: python-3.xstringsubstring

解决方案


意识到空格/缩进在 python 中很重要,并替换了大多数其他语言中用于定义范围的 { }。像这样的东西是一个适当的功能(尽管返回并不是真正必要的):

def foo():
    print("bar")
    return

但是,这样做会导致类似于您的错误消息,因为现在的返回超出了函数的范围:

def foo():
    print("bar")
return

有关更多信息,只需 Google for python 缩进教程


推荐阅读