Loops 模余数等于零,循环中只考虑前两个乘积

Loops 模余数等于零,循环中只考虑前两个乘积,loops,python-3.x,modulo,Loops,Python 3.x,Modulo,我试图找到一个给定数字的所有除数(在我的例子中是“I”)(在我的例子中是“a”),没有余数(a%I==0)。我在运行一个循环,它通过I的所有值,从1到a。问题是只考虑了%i==0的前两个产品。其余的都被忽略了。为什么呢 下面是python3中的代码: a = 999 i = 1 x = 0 d = [] while (i < a): x = a / i if(x % i == 0): d.append(i) i += 1 print (d) 而

我试图找到一个给定数字的所有除数(在我的例子中是“I”)(在我的例子中是“a”),没有余数(a%I==0)。我在运行一个循环,它通过I的所有值,从1到a。问题是只考虑了%i==0的前两个产品。其余的都被忽略了。为什么呢

下面是python3中的代码:

a = 999
i = 1
x = 0
d = []

while (i < a):
    x = a / i
    if(x % i == 0):
        d.append(i)
    i += 1

print (d)
而不是列出所有的除数。
我检查了a的不同值,但找不到错误

脚本的行为是正确的。你自己看看:

我认为这是你的逻辑,你试图实现的是:

a = 999
i = 1
d = []

while (i < a):
    if(a % i == 0):
        d.append(i)
    i += 1

print (d)

为了补充安东的答案,一种更具蟒蛇风格的循环方式是:

a, d = 999, []
for i in range(1, a):
    if a%i == 0:
        d.append(i)
您还可以利用以下事实,即对象具有:

或者您可以使用列表:

d = [i for i in range(1, a) if not a%i]

感谢@Anton Sinyakin给出解决方案。我知道输出是什么,我知道它是正确的。我的问题是,为什么循环在“I”达到值3后停止追加值,即使它计算并打印了值。我现在看到,操作x=a/I是完全无用的,因为没有这个额外的等式,%I的计算结果完全相同,但是如果代码是正确的,为什么它会按它的意思工作?@nao_de_naoned,问题是你做
x=a/I
,然后你做
x%I
(不是
a%I
)。如果你选择了
i=9
,那么在你的例子中,你会得到
x=999/9=111
,然后你尝试
111%9
,它会给你
3
(而不是
999%9
,它会给你
0
)。脚本没有停止,只是没有找到你要找的东西,因为你找错了地方:)我想我现在明白多了。事实上,x保持其值,而不是在循环的每次迭代中获取一个新值。事实证明,我学到了有关while循环的一些新知识:)。再次感谢@Anton Sinyakin。不,您在每次迭代时都为
x
指定了一个新值,实际上只是您的测试是错误的:
a%i
通常与
x%i=(a/i)%i
不同。感谢@Francis提供了这么好的解决方案。
a, d = 999, []
for i in range(1, a):
    if a%i == 0:
        d.append(i)
if not a%i:
d = [i for i in range(1, a) if not a%i]