Python'不在'运算符无法正常工作?

时间:2018-01-29 05:21:07

标签: python for-loop iterator definitions

def step(g, m, n):
    notstorage=[]
    actualvalues =[]
    for i in range(m, (n+1)):
        for primechecker in range(2,i):
            if i % primechecker == 0:
                notstorage.append(i)



    for value in range(m, (n+1)):
        if (value) and (value+g) not in set(notstorage):
            actualvalues.append(value)
            actualvalues.append(value+g)
            break
    return(actualvalues)

在上面的代码中,我试图弄清楚哪些数字是素数,并创建一个列表,检查是否有两个素数由一定数量(g)分隔。我有问题,因为由于某种原因,数字303作为素数被返回,因为它显然不是因为它可以被3整除....我不确定为什么代码不是'工作正常吗?

当我输入时:

step(4,300,400)

我期待输出(307,311),因为这是前4个数字的前2个素数但是我得到了(303,307)的回报

不确定我做错了什么?

2 个答案:

答案 0 :(得分:2)

表达式

(value) and (value+g) not in set(notstorage)

检查(value)是否评估为True(value+g) not in set(notstorage)评估为True

检查(value)(value+g)是否都不在集合中。

答案 1 :(得分:1)

您需要使用以下语法:

if (value) not in set(notstorage) and (value+g) not in set(notstorage):