为什么'而#39;导致程序在Python中运行更长时间

时间:2017-01-30 08:09:48

标签: python python-3.6

我写了一个程序来查找数字列表中的素数,只是练习格式化等等。这是我的代码:

from math import *
#Defining range to be checked
a = range(1,10)
#Opening empty list
b = []
#Wilsons method for primes
for n in a:
    if ((factorial(n-1))+1)%n == 0:
        b.append(n)

此代码运行时没有问题且相当快,至少在此阶段使用。但是,当我包含while语句(见下文)时,它会慢得多。

from math import *
#Defining range to be checked
a = range(1,10)
#Opening empty list
b = []
#Wilson't method for primes
for n in a:
    while n>1:
        if ((factorial(n-1))+1)%n == 0:
            b.append(n)

有人可以解释为什么会这样吗?

n.b:我知道有更有效的方法可以找到素数。我只是练习格式化,尽管我不介意改进我的代码。

编辑:错误添加小于符号而不是适当的大于符号。校正。

1 个答案:

答案 0 :(得分:0)

正如有些人所指出的那样,您的代码会导致无限循环,因为n的值不会在您的while循环 中改变

您可能不会首先寻找while循环。在没有第一次迭代(n = 1)的情况下使用for循环就足够了。如果您坚持包括n = 1,则使用if语句可能是一种解决方法:

a=range(1,10)
b=[]
for n in a:
    if n>1:
        if ((factorial(n-1))+1)%n == 0:
            b.append(n)