0

我想计算三角形数的除数。这是我的尝试。

tn = 0
list1 = []
for counter in range(1,8):
    tn=tn+counter
    for i in range(1,counter):
        if(tn%i==0):
            list1.append(i)
    print(list1)

我想将除数发送到一个列表并计算该列表中元素的数量。但是这个程序没有给出正确的输出。请帮我解决这个问题。

 1: 1           #of elements 1
 3: 1,3         #of elements 2
 6: 1,2,3,6     #of elements 4
10: 1,2,5,10    #of elements 4
15: 1,3,5,15    #of elements 4
4

2 回答 2

1

您可以使用列表理解

def getDivisors(inputNum):
    result = [i for i in range(2, inputNum // 2 + 1) if inputNum % i == 0]
    result.insert(0, 1)
    if inputNum not in result: result.append(inputNum)
    return result

print getDivisors(1)
print getDivisors(3)
print getDivisors(6)
print getDivisors(10)
print getDivisors(15)

输出

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

[i for i in range(2, inputNum // 2 + 1) if inputNum % i == 0]是相同的

result = []
for i in range(2, inputNum // 2 + 1):
    if inputNum % i == 0:
        result.append(i)
于 2013-10-30T11:35:28.850 回答
1

我更改了您的 for 循环并添加了一个额外的 while 循环以使其正常工作。

tn = 1
increase=2
numbers=[]
divisor=[]
i=0

while i<15:
 tn+=increase
 numbers+=[tn]
 increase+=1
 i+=1

for i in numbers:
 divisor+=[i]
 print(i,":", divisor)

我使代码工作到不包括 1 的第 15 个三角形数。while 循环非常不言自明,它只是计算出下一个三角形数并将其添加到变量数中。我的第二个循环 - for 循环 - 循环遍历 in 中的数字numbers并将每个数字添加到变量divisor中。每次发生这种情况时,解释器都会打印当前的三角形数,以及它的所有前辈——这就是你所要求的。

运行代码并自己查看,但下次在问别人之前先考虑清楚,这是一个相当简单的任务。

此外,如果您要添加一个已经初始化的变量,则不需要编写variable=variable+n,只需将其缩短为variable+=n并且永远不要在条件语句周围放置括号,无论是 Python 2 还是 Python 3(您只能在语言中这样做如 Java、Javascrip、C 和 C++)

于 2013-10-30T12:27:16.017 回答