如何简化python中素数生成器的循环

时间:2015-07-15 18:02:24

标签: python-2.7

import math

def is_prime(num):
    if num < 2:
        return False
    for i in range(2, int(math.sqrt(num))+ 1):
        if num % i == 0:
            return False
    return True

Primes似乎是一个热门话题,但是在我正在学习Python的书中,我在21节中的第6章和在循环中教授的迭代章节中。虽然我明白他们做了什么,但我还没有学习循环。所以,假设我还没有学习for循环,只有当/ elif / else语句和while循环作为我的工具时才会给出。如何使用上述工具将for行代码更改为更简单的代码?在提出这个问题时,我很快就提出了这个代码:

def formula(num):
    i = 2
    while i >= 2:
        return int(math.sqrt(num)+ 1)


def is_primetwo(num):
    i = 2
    if num < 2:
        return False
    formula(num)
    if num % i == 0:
        return False
    return True 

它可以工作,但这是for循环的简单版本还是有更简单的东西,我不需要在函数中包装函数?

3 个答案:

答案 0 :(得分:0)

如下:

from math import sqrt

def is_prime(num):
    if (num < 2):
        return False
    i = 2
    limit = int(sqrt(num) + 1)
    while (i <= limit):
        if num % i == 0:
            return False
        i = i + 1
    return True

答案 1 :(得分:0)

不确定这是否是你想要的,但是for循环:

sets

可表示为:

a = [2, 3]
b = [1, 2, 3, 4]

set(a).issubset(set(b))

确定for i in range(2, int(math.sqrt(num))+ 1): if num % i == 0: return False return True 一次可能是一个好主意:

i = 2
while i < int(math.sqrt(num))+ 1):
    if num % i == 0:
        return False
    i += 1
return True

答案 2 :(得分:0)

当然,您不需要替换for循环的函数。

所以你有这个

for i in range(2, int(math.sqrt(num))+ 1):

这是你的for循环。花点时间思考它在做什么。

1。)它取变量i,并以2的值开始。

2。)通过检查i是否小于(num的平方根)加1

,检查是否每次都进行循环

3.。)每次循环,它都会向i添加一个。

我们可以使用while循环来完成所有这些事情。

这是原来的

for i in range(2, int(math.sqrt(num))+ 1):
    if num % i == 0:
        return False

让我们重命名第二行和第三行loop contents,以便我们重点关注循环部分,而不是我们对变量i执行的逻辑。 num

for i in range(2, int(math.sqrt(num))+ 1):
    loop contents
好吧,现在让我们重新安排它成为一个while循环。我们需要先将i设置为2。

i = 2

现在我们要检查i是否在我们想要的范围内

i = 2
while i <= int(math.sqrt(num) + 1):
    loop contents

现在我们几乎已经设定了,我们只需要让i实际改变,而不是永远保持2的价值。

i = 2
while i <= int(math.sqrt(num) + 1):
    loop contents
    i = i + 1

你的例子似乎做了一些这些元素,但这种方式是一种简单的方法,并且不需要额外的功能。可能是range()函数令人困惑。请记住,for循环正在做三件事;将变量设置为初始值,检查条件(一个变量小于另一个变量),并将变量增加到比先前大一个以再次运行循环。