[英]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.