Prime检查器不会删除被5整除的数字?

时间:2015-08-06 00:08:25

标签: python python-3.x

我的程序查看输入,然后返回小于或等于该数字的所有素数的列表。它目前不是要删除可被5整除的数字,而且我的'测试可分性为'声明每次都返回3次。

import math


def is_prime(number):
    if number % 2:
        # equivalent to if number % 2 != 0 because if number is
        # divisible by 2 it will return 0, evaluating as 'False'.
        for num in range(3, int(math.sqrt(number)) + 1, 2):
            print("Testing divisibility by {}".format(num))
            if number % num == 0:
               return False
            else:
                return True
    else:
        return False



def list_of_primes(number):
    prime_list = []
    for x in range(2, number + 1):
            if is_prime(x):
                prime_list.append(x)
    return prime_list



def main():
    while True:
        usr_in = eval(input("Please enter a positive number"
                            " greater than 1: "))
        if usr_in > 1: break
        else:
            print("Number not valid.")


    prime_list = list_of_primes(usr_in)
    for x in prime_list:
        print(x)


if __name__ == '__main__':
    main()

2 个答案:

答案 0 :(得分:1)

问题在于你的for循环中的if-else:

def is_prime(number):
    if number % 2:
        for num in range(3, int(math.sqrt(number)) + 1, 2):
            print("Testing divisibility by {}".format(num))
            if number % num == 0:
               return False
            else:
                return True
    else:
        return False

考虑number25时的情况。在for循环的第一次迭代中,num3。然后,由于number%num(即25%3)不是0,因此不会返回False,并输入else并返回True

这是您想要做的事情(请注意for循环中没有else):

import math


def is_prime(number):
    if number % 2:
        # equivalent to if number % 2 != 0 because if number is
        # divisible by 2 it will return 0, evaluating as 'False'.
        for num in range(3, int(math.sqrt(number)) + 1, 2):
            print("Testing divisibility by {}".format(num))
            if number % num == 0:
                return False
        return True
    else:
        return False

答案 1 :(得分:0)

删除你的" is_prime"和" list_of_primes"并替换为:

def list_of_nonprimes(number):
    return [j for i in range(2, 8) for j in range(i*2, number, i)]

def list_of_primes(number):
    noprimes = list_of_nonprimes(number)
    return [x for x in range(2, number) if x not in noprimes]

...顺便说一下,我是从List Comprehension Tutorial获得的。另外,我认为你不需要在Python 3.4 +中导入数学。

请参阅此帖子了解very nice explanation如何运作。

希望这有帮助!