这是代码。
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]
如何获得这样的输出?谢谢。
答案 0 :(得分:3)
您将在循环内追加到同一个result
列表。您应该在外部循环中创建一个新的result
列表。并且您的print语句错误缩进。将它移到内循环之外。
您的代码应为:
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]
答案 1 :(得分: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))
如果你找到一个可以除数n的数字i,则n和n / i都成为除数。
唯一的问题是完美的方形数字,其根将被添加两次(如果我成为n的根,n / i和i相等并且两者都将被添加到列表中)。
它由set()
函数解决。