2013-10-30 47 views
0

我想計算一個三角形數的除數。這裏是我的嘗試。python中的三角形數字

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) 

我想除數發送到列表和計數該元素的個數list.But這個程序沒有給出正確的output.Please幫我解決這個問題。

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 
+0

歡迎來到Stack Overflow!看起來你希望我們爲你寫一些代碼。 儘管許多用戶願意爲遇險的編碼人員編寫代碼,但他們通常僅在海報已嘗試自行解決問題時才提供幫助。 證明這一努力的一個好方法是包含迄今爲止編寫的代碼, 示例輸入(如果有的話),期望的輸出和實際獲得的輸出(控制檯輸出,堆棧跟蹤,編譯器錯誤 - 無論什麼適用)。 您提供的細節越多,您可能收到的答案越多。 –

+0

這就是我想要的。 – user2923133

+0

1:1#元素1 3:1,3#元素2 6:1,2,3,6#元素4 10:1,2,5,10 #of元素4 15:1 ,3,5,15#元素4 – user2923133

回答

1

您可以使用list comprehension

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) 
+0

我不確定列表理解對剛剛開始使用Python的人來說會有多大意義。另外,它提到了Python 3,所以我將xrange更改爲範圍。 – Evert

+0

@Evert謝謝男人:)我已經用基本的解釋更新了我的答案。 – thefourtheye

+0

整潔:一個獎勵列表理解解釋/例子。 – Evert

1

我改變了你的循環,並增加了一個額外的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) 

我所做的工作代碼到15三角形數量不包括1,while循環是不言自明,它只是作品出下一個三角形數量,並增加了這對變量的數字。我的第二個循環 - for循環遍歷numbers中的數字,並將每個數字添加到變量divisor中。每次發生這種情況時,解釋者都會打印當前的三角形編號以及其所有前輩 - 這就是您所要求的。

運行代碼並親自查看,但下次在問別人之前想想,這是一個相當簡單的任務。另外,如果你添加一個已經初始化的變量,你不需要編寫variable=variable+n,只需將它縮短到variable+=n,並且不要在條件語句周圍放置括號,不管它是Python 2還是Python 3(你會只能在Java,Javascrip,C和C++等語言中使用)