首页 > 解决方案 > 使用 for 和 while 循环编写素数函数的最 Pythonic 方式是什么?

问题描述

我即将执行一个函数,其目的是如果它的参数是或不是素数,则返回一个素数/非素数语句。我成功地使用了一个 for 循环:

def prime1(n):

z = []

for i in range (1, n+1):
    if (n/i).is_integer():
        z.append(i)
        i=i+1

if len(z) == 2:
    print ("Prime")
else:
    print ("Not prime")`

然后我尝试做同样的事情,但使用 while 循环:

def prime2(n):

z = []
i = 1

while i < int(len(range(1, n+1))):
    if (n/i).is_integer():
        z.append(i)
        i=i+1

if len(z) == 2:
    print ("Prime")
else:
    print ("Not prime")

不幸的是,我的系统继续计算而没有打印输出。

你能解释一下我在哪里犯了错误吗?

标签: pythonfor-loopwhile-loopprimes

解决方案


The在你的循环i = i + 1中什么都不做,因为值被迭代器的下一个值覆盖;有效地,循环在每次迭代中为你执行,无论是否划分。你需要在你的循环中做同样的事情:forifori = i + 1inwhile

while i < n + 1:
    if (n/i).is_integer():
        z.append(i)
    i = i + 1

推荐阅读