谁能告诉我为什么这个代码可以yield 3
import mathdef is_prime(number):
if number > 1:
if number == 2:
return True
if number % 2 == 0:
return False
for current in range(3, int(math.sqrt(number) + 1), 2):
if number % current == 0:
return False
return True
return False
def get_primes(number):
while True:
if is_prime(number):
yield number
number += 1
def solve():
total = 2
for next_prime in get_primes(3):
if next_prime < 2000000:
total += next_prime
else:
print(total)
return
if __name__ == '__main__':
solve()
看了小甲鱼写的代码 我一直搞不明白 为什么 if is_prime(3)这个地方 还可以yield 3出来 因为 在函数里面3%3已经==0了 不是false吗? 为啥还能Yield 3哪个大神给我解释一下 我一直搞不懂为什么你觉得这段代码在 number 为 3 时会执行。 for current in range(3, int(math.sqrt(number) + 1), 2):
if number % current == 0:
return False这个 range 在 number 为 3 时是 range(3,2,2) 永恒的蓝色梦想 发表于 2020-5-20 11:51
我一直搞不懂为什么你觉得这段代码在 number 为 3 时会执行。这个 range 在 number 为 3 时是 range(3,2,2)
非常感谢 现在明白了 事实上range(3, int(math.sqrt(number) + 1), 2)在number为3的情况下等价于range(3,2,2)并不会在for循环遍历这个列表的时候得到一个空值就没了,不会达到3这个值,所以不会出现3%3的计算,所以不满足return False的条件,返回的自然就是True Hoiste 发表于 2020-5-20 11:57
事实上range(3, int(math.sqrt(number) + 1), 2)在number为3的情况下等价于range(3,2,2)并不会在for循环遍 ...
感谢解惑 ~
页:
[1]