循环给出不同的回报和打印结果?

时间:2014-08-14 06:55:03

标签: python

以下代码适用于课堂练习。我们试图找到目标字符串的最后位置:

def find_last(search, target):
    count = 0
    while search.find(target, count) != -1:
        return search.find(target, count)
        count = count +1

print find_last('aaaabbaaabbbab', 'ab')

答案应为12,但如果我运行代码,我会得到答案3

但是,如果我使用此代码:

def find_last(search, target):
    count = 0
    while search.find(target, count) != -1:
        print search.find(target, count)
        count = count +1

print find_last('aaaabbaaabbbab', 'ab')

我得到了这个答案:

3 3 3 3 8 8 8 8 8 12 12 12 12 None

所以,看起来我的函数找到了正确答案12,问题是为什么打印出3,这是循环的第一个结果,而不是{{1}当我使用12语句时?

4 个答案:

答案 0 :(得分:2)

了解return statement

  

return > 当前函数调用表达式列表(或   无)作为返回值。

当你这样做时:

while search.find(target, count) != -1:
        return search.find(target, count) 

return返回结果并终止函数find_last的执行。

删除它,你就没事了。在循环之后不要忘记return count

答案 1 :(得分:1)

那是因为return终止了当前函数并返回了值。当你到达return并退出函数find_last时,循环就会停在那里。

您可以将值存储在变量中并在循环之后返回,而不是在循环内返回。

答案 2 :(得分:1)

return会丢弃当前函数中的剩余代码,并继续在调用者中执行。

要查看正在进行的操作,请运行以下命令:

def find_last(search, target):
    count = 0
    while search.find(target, count) != -1:
        print  search.find(target, count)
        return search.find(target, count)
        assert 0, 'unreached'
        count += 1

print find_last('aaaabbaaabbbab', 'ab')

它只打印3两次:一次在find_last内,一次在外面。

答案 3 :(得分:0)

你想要这个吗?

def find_last(search, target):
    if search.find(target, 0) != -1:
        count = len(search)
        while search.find(target, count) == -1:
            count -= 1
        return search.find(target, count)
    else:
        return None

print find_last('aaaabbaaabbbab', 'ab')