2017-08-16 27 views
1

因此,我正在處理一個問題,需要我獲取一定數量的因子。因此,我總是使用模塊%來查看數字是否可以被某個數字整除,並且等於零。但是,當我試圖這樣做時,我總是收到一個錯誤,說ZeroDivisionError。我試着添加一塊這樣的代碼,所以python不會從零開始計數,而是從一個for potenial in range(number + 1):開始計數。但這似乎不起作用。下面是我的代碼的其餘任何幫助將不勝感激。保持ZeroDivisonError無論何時使用模塊

def Factors(number): 
factors = [] 
for potenial in range(number + 1): 
    if number % potenial == 0: 
     factors.append(potenial) 
    return factors 
+0

您需要在'for'循環外'返回因子'。無論如何,你的縮進是關閉的......(這是獲得整數因子的非常低效的方法) –

回答

0

在for循環中,您從0(範圍()假設起始數字爲0,如果只給出1個參數)迭代到「數字」。有一個ZeroDivisionError,因爲您正試圖計算for循環開始時的模數0(數字%0)。在計算模數時,Python會嘗試將數字除以0,導致ZeroDivisionError。這裏是修正的代碼(固定縮進):

def get_factors(number): 
    factors = [] 
    for potential in range(1, number + 1): 
     if number % potential == 0: 
      factors.append(potential) 
    return factors 

但是,有更好的方法來計算因子。例如,您只能迭代到sqrt(n),其中n是數字,然後計算「因子對」,例如如果3是15的因子,那麼15/3也是15的因子。 我鼓勵您嘗試使用更高效的算法。

文體筆記:根據PEP 8,函數名應該是小寫字母,並用下劃線分隔。大寫名稱通常表示類定義。