2017-11-04 164 views
3
def problem(n): 
    myList = [] 
    for i in range(2, n): 
     if n % i == 0: 
      myList.append(i) 

    return myList 

與此代碼我想知道你將如何得到例如12的因素打印出[[6,2],[3,4]]這樣的dosnt必須在相同的順序謝謝。蟒蛇放入列表

+0

更新後按照https://開頭stackoverflow.com/help/someone-answers –

回答

1

這應該爲你工作:

import math 

def problem(n): 
    myList = [] 
    for i in range(2, int(math.sqrt(n) + 1)): 
     if n % i == 0: 
      myList.append([i, int(n/i)]) 

    return myList 

爲了得到因素對,這種劃分n通過i,如果i是一個因素,它通過i的對將。

例如:

print(problem(12)) #output: [[2, 6], [3, 4]] 
+0

你能解釋一下哪些部分添加了嗎?謝謝 –

+0

@joey'int(n/i)'''''''''''''''將''劃分出來,然後把答案變成一個整數。 – gommb

+0

那麼我的名單中沒有的部分呢,那麼做什麼呢,也不是一個痛苦,還有另一種方式來做到這一點。也可以在沒有圖書館的情況下做到這一點 –

1

你幾乎是正確的。使用範圍,你沒有采取數字。只需添加n + 1而不是n。這應該工作。此外,你並沒有在名單上爭奪這位賤民。我也補充說。

def problem(n): 
    myList = [] 
    for i in range(2, n+1): 
     if n % i == 0 and [int(n/i),i] not in myList: 
      myList.append([i,int(n/i)]) 

    return myList 
+0

做什麼([i,int(n/i)]) –

+1

這會導致重複因子 – gommb

+0

但我很擔心我和(n/i)做什麼 –

1

另一種方式。使用range,並檢查循環,如果is_integer

num = 12 
set([tuple(sorted(j)) for j in [[i, int(num/i)] for i in range(2,num) if (num/i).is_integer()]] 
) 
#Output: 
#{(2, 6), (3, 4)} 
0

爲了做到分工只有一次:

for i in range(2, int(math.sqrt(n) + 1)): 
    d, m = divmod(n, i) 
    if m == 0: 
     myList.append([i, d]) 

你不會得到重複使用上限sqrt(n)