繁体   English   中英

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

[英]While loop giving different return and print results?

以下代码用于课堂练习。 我们正在尝试找到目标字符串的最后一个位置:

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 ,这是循环的第一个结果,而不是12当我使用return语句时?

阅读有关return语句的信息

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

当您这样做时:

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

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

只需将其删除,就可以了。 只是不要忘记在循环后return count

那是因为return终止当前函数并返回值。 当您return时,循环就在该处停止,并退出了find_last函数。

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

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内部,一次在它外部。

你想要这个吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM