Python 我需要在这个列表中找到素数

Python 我需要在这个列表中找到素数,python,python-3.x,Python,Python 3.x,我想从具有以下规格的列表中查找素数: A) 如果数字是素数,代码应打印“[number]是素数。” B) 如果数字不是质数,则应打印“[number]不是质数”,并打印该数字的一个因子,而不是1和数字本身:“[factor]是[number]的一个因子” 有人能解释一下这个代码吗?我无法理解为什么有num-1来查找素数。为什么我们没有在这里使用else语句?答案是range(2,num)生成从2到num-1的数字,因为range(0,n)通常生成从0到n-1的数字。因此,您的i将从2运行到num

我想从具有以下规格的列表中查找素数: A) 如果数字是素数,代码应打印“[number]是素数。” B) 如果数字不是质数,则应打印“[number]不是质数”,并打印该数字的一个因子,而不是1和数字本身:“[factor]是[number]的一个因子”


有人能解释一下这个代码吗?我无法理解为什么有num-1来查找素数。为什么我们没有在这里使用else语句?

答案是
range(2,num)
生成从2到
num-1的数字,因为
range(0,n)
通常生成从0到n-1的数字。因此,您的
i
将从2运行到
num-1
。这就是为什么要检查
如果i==num-1:
以查看
i
的所有值是否都用于检查素数。

这是一个草率的代码

逻辑是,这个数是素数,当且仅当你通过了所有可能小于这个数的因子。在这种情况下,
i==num-1

有更好的方法来确定一个数是否为素数。您可以搜索“determineprimepython”,并通过更好的代码和更直接的逻辑获得更多点击率

例如,这一点更加明确:

import math

check_prime = [26, 39, 51, 53, 57, 79, 85].
for num in check_prime:
    is_prime = True
    for i in range(2, int(num**0.5) + 1):
        if (num % i) == 0:
            is_prime = False
            break

    if is_prime:    
        print("{} IS a prime number".format(num))
    else:
        print("{} is NOT a prime number, because {} is a factor of {}".format(num, i, num))

这对您来说更容易理解吗?

因为内部循环在
范围(2,num)
上迭代
i
i
最终会变成
num-1
,如果循环没有因为找到除数而遇到
中断,这就是确定素数的方式

或者,您可以使用
for else
构造来实现仅当循环未以更清晰的方式遇到
中断时才确定该数字为素数的目标:

for num in check_prime:
    for i in range(2, num):
        if (num % i) == 0:
            print("{} is NOT a prime number, because {} is a factor of {}".format(num, i, num))
            break
    else:
        print("{} IS a prime number".format(num))

math.sqrt
返回浮点,但
range
需要整数参数。您还可以使用
num**0.5
执行平方根运算,而无需任何导入。另外,
is_prime
基本上设置一个标志,以查看循环是否以
break
停止,这就是
for..else
的基本功能。您是对的-for循环可以有一个
else
块来捕获从未执行
break
的情况。我想写这段代码的人不知道这一点,所以他们试图测试
I
是否到达了范围的最后一步。但这是错误的,因为如果
num
2
(即prime),
i
将永远不会递增。
for num in check_prime:
    for i in range(2, num):
        if (num % i) == 0:
            print("{} is NOT a prime number, because {} is a factor of {}".format(num, i, num))
            break
    else:
        print("{} IS a prime number".format(num))