Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python 3.4.1中查找素数_Python_Python 3.x - Fatal编程技术网

在Python 3.4.1中查找素数

在Python 3.4.1中查找素数,python,python-3.x,Python,Python 3.x,下面是我收到的输出 for n in range(2,10): for x in range(2,n): if n%x==0: print(n, 'equals to', x, '*', n//x) break else: print(n, 'is a prime number') 但是,这是重复的价值观。此外,9不是质数。 请帮我纠正语法 以下是链接: 程序会检查n是否可被因子整除

下面是我收到的输出

for n in range(2,10):
    for x in range(2,n):
        if n%x==0:
            print(n, 'equals to', x, '*', n//x)
            break
        else:
            print(n, 'is a prime number')
但是,这是重复的价值观。此外,9不是质数。 请帮我纠正语法

以下是链接:

程序会检查
n
是否可被因子整除。如果是,很好,您可以正确打印它是复合的。如果不是,你会立即打印出一个素数。问题是,在检查完其他因素之前,你不知道这一点。9不能被2整除并不意味着它是素数。你也必须检查3

这意味着要稍微改变一下你的逻辑。在声明
n
为素数之前,需要检查所有可能的因素。一种方法是使用一个额外的布尔变量

3 is a prime number
4 equals to 2 * 2
5 is a prime number
5 is a prime number
5 is a prime number
6 equals to 2 * 3
7 is a prime number
7 is a prime number
7 is a prime number
7 is a prime number
7 is a prime number
8 equals to 2 * 4
9 is a prime number
9 equals to 3 * 3
请注意,“is a prime number”打印输出不再在内部循环内,而是在内部循环外

另一种方法是使用很酷的Python技巧,向内部循环添加
else
子句。
else
子句仅在循环退出而未命中
break
语句时发生

for n in range(2,10):
    is_prime = True

    for x in range(2,n):
        if n%x==0:
            print(n, 'equals to', x, '*', n//x)
            is_prime = False
            break

    if is_prime:
        print(n, 'is a prime number')

请注意,将
else
子句固定到循环上的想法是Python ism。它在C或Java等其他语言中不存在。因此,尽管很简洁,但理解基于布尔变量的解决方案也很好。该技术适用于任何语言。

根据您提供的链接,在示例代码下面有一条语句,其中

是的,这是正确的代码。仔细看:else子句属于for循环,而不是if语句


因此,如果我很难理解到底发生了什么,那么您应该将
else
子句的目标定为内部的
而不是
。找到了这个答案

还有一个类似这样的问题,它可能会对您有所帮助:这是缩进问题……感谢您的解答。
for n in range(2,10):
    for x in range(2,n):
        if n%x==0:
            print(n, 'equals to', x, '*', n//x)
            break
    else:
        print(n, 'is a prime number')