“ While”循环在查找数字的素因时导致错误。并且不能大量使用此程序

时间:2018-08-03 15:02:20

标签: python prime-factoring

创建了一个程序来查找自然数的素因数,但出现错误:

multipliers = []
a = 2
value = input("Put a natural number here: ")
value = int(value)

for i in range(1, value):
    if value % i == 0:
        multipliers.append(i)

for x in multipliers:
    while a < x:
        if x % a == 0:
            multipliers.remove(x)
        else:
            a += 1

print(multipliers)

我在这里要做的是:获取一个输入值,找到一个值的乘数,并从中得出一个列表,将这些乘数乘以1,然后尝试除以[2、3、4、5。 。],如果a是x的乘数,则将其从列表中删除,并从列表中获取另一个值x,然后执行相同的操作。

但是当我尝试运行此程序时,我收到一条错误消息,提示

  

ValueError:list.remove(x):x不在列表中

我不知道我在哪里做错了。你能帮我吗?

1 个答案:

答案 0 :(得分:0)

因为x已从列表中删除-然后while循环再次循环,并尝试再次从列表中删除x

要解决此问题,请在您的while循环中添加一个break,如下所示:

for x in multipliers:
    while a < x:
        if x % a == 0:
            multipliers.remove(x)
            break
        else:
            a += 1

您还可以用列表理解替换第二个for循环:

factors = [x for x in multipliers if all(x % a != 0 for a in range(2, x))]