Python - 在基本函数中 Print 有效但 Return 无效的情况

Nor*_*tfi 6 python position python-3.x

正如标题所示,我做了一个简单的函数,如下所示:

import sys

string = sys.argv[1]
def position():
        for index in range(len(string)):
                if string[index] == 'A':
                        print(int(index+1))

position()
Run Code Online (Sandbox Code Playgroud)

当与“AABABC”等测试字符串一起使用时,将以数字形式返回每个“A”的位置。

在这里,我增加索引,1 因为我注意到范围从 0 开始。虽然我可以传递 1 或任何我想要的数字以使其开始,但它会删除/不打印我想要的所有内容。所以我发现这在这种情况下效果最好。

这里一切正常。但当我用return语句替换函数中的 print 时却没有:

import sys

string = sys.argv[1]
def position():
        for index in range(len(string)):
                if string[index] == 'A':
                        return int(index+1)

print(position())
Run Code Online (Sandbox Code Playgroud)

在这里,我只显示对代码的编辑,但我确实尝试了几种不同的方法,所有方法都具有相似的结果(因为它不起作用):

  • 不使用 int() 而是用 -> 增加索引+=在这种特定情况下不起作用?
  • 使用另一个变量(一个幼稚的测试,显然不起作用)

与可能被视为与我的重复/相似的其他“问题”相比,我print()在最后一个示例中使用了它之外的函数。所以问题很可能不是来自那里。

我也不认为我的缩进是错误的。

为了提供有关“什么不起作用”的更多详细信息,当我使用return而不是print此处并使用诸如“ABABACD”之类的测试字符串时,它将输出正确的“136”作为结果。但是,当return与我之前列出的其他失败尝试一起使用时,它只会输出“1”......

goa*_*998 5

无论是否还有更多“循环”,Return 都会结束函数的运行。如果你想让它返回字符串中存在“A”的所有位置,你可以尝试这样的操作:

def position():
    return [i+1 for i, j in enumerate(string) if j == "A"]
Run Code Online (Sandbox Code Playgroud)

与...一样

def position():
    pos = []
    for i, j in enumerate(string):
        if j == "A":
            pos.append(i+1)
    return pos
Run Code Online (Sandbox Code Playgroud)

也可以使用正则表达式来完成:

import re

[i.start()+1 for i in re.finditer("A", string)]
Run Code Online (Sandbox Code Playgroud)