【发布时间】:2020-07-01 01:32:17
【问题描述】:
我试图在 python 中创建一个素数生成器,但我遇到了一个问题。这是我的代码
def prime_generator():
n = 2
while n < 100:
for i in range(2, n):
if n % i == 0:
break
else:
yield n
n += 1
我认为这应该生成小于 100 的素数。它由一个 while 循环组成,该循环采用 n,从 2 开始,并使用一个 for 循环来确定它是否为素数.如果 n 不是素数,它会将 n 增加 1 并继续循环,直到产生素数 n。
但是,每当我多次运行 print(next(prime_generator())) 时,我只会得到一堆 2 作为输出。通过调试器单步执行它,我注意到每次 python 运行 next(prime_generator()) 时,它都会重新启动生成器并重置 n = 2 而不是从 yield n 离开,然后应该增加 n 并继续 while 循环。为什么会重启?它不应该从 yield 继续,因为它是一个生成器吗?
【问题讨论】:
-
您的
else似乎没有正确的缩进级别。 -
顺便说一句,否则是 LOOP 之后允许的关键字。这就是为什么你不会出错。
-
@John 我认为 OP 打算这样做。这是一个 for/else 构造。我对其进行了测试,代码按原样运行,但如果您“修复”它,则不会。
-
@BrianMcCutchon 好点。鉴于
for ... else与if ... else相比的稀有性,这似乎是一个不错的猜测。
标签: python while-loop generator