-1

这是代码。

x=0
result=[]
for n in range(1,5):
    x=x+n;
    for i in range(1,10):
        if x%i==0:
            result.append(i)       
            print(x,result)

在这里,我生成了三角数。我想找到每个三角数的除数。但是当我执行代码时,我得到以下输出。

1 [1]
3 [1, 1]
3 [1, 1, 3]
6 [1, 1, 3, 1]
6 [1, 1, 3, 1, 2]
6 [1, 1, 3, 1, 2, 3]
6 [1, 1, 3, 1, 2, 3, 6]
10 [1, 1, 3, 1, 2, 3, 6, 1]
10 [1, 1, 3, 1, 2, 3, 6, 1, 2]
10 [1, 1, 3, 1, 2, 3, 6, 1, 2, 5]

同样的三角形数也重复了几次。所以我需要一个输出看起来像,

1 [1]
3 [1, 3]
6 [1, 2, 3, 6]
10 [1, 2, 5]

我怎样才能得到这样的输出?谢谢。

4

2 回答 2

3

您将附加到result循环内的相同列表。result您应该在外循环中创建一个新列表。而且您的打印语句缩进错误。将它移到内循环之外。

您的代码应该是:

x=0
for n in range(1,5):
    x=x+n;
    result = []
    for i in range(1,10):
        if x%i==0:
            result.append(i)       
    print(x,result)

输出:

1 [1]
3 [1, 3]
6 [1, 2, 3, 6]
10 [1, 2, 5]
于 2013-08-25T13:38:55.270 回答
0

要查找数字的除数,您可以使用此功能

def divisors(n):
    divisors=[]
    for i in range(1,int(n**0.5)+1):
        if n%i == 0:
            divisors.extend((i,n/i))
    return list(set(divisors))

如果你找到一个数 i 可以整除一个数 n,n 和 n/i 都成为除数。唯一的问题是完美平方数,其中它的根将被添加两次(如果我成为 n 的根,n/i和 i 相等,两者都将被添加到列表中)。是通过set()函数来​​解决的。

于 2013-08-25T15:09:52.390 回答