2017-01-27 33 views
-3
def fi_da_prfac(var): 
    fac = [] 
    prfac = [] 
    z = range(2, (var/2)+1) 
    z.append(var) 
    for t in z: 
     if var == t: 
      prfac.append(t) 
      z = range(2, (var/2)+1) 
      z.append(var) 
      break 
     else: 
      if var % int(t) == 0: 
       prfac.append(t) 
       var = var/t 
       del z 
       z = range(2, (var/2)+1) 
       z.append(var) 
       del t 

    return prfac 

我是一個初學者在編碼。我正在嘗試編寫代碼來查找給定數字的Prime因式分解。如果我們分析代碼,我想要做的是如果我找到一個因素,我想再次啓動for循環,即。從t = 2開始for循環。我沒有找到任何方法來做到這一點。所以我最後刪掉了「t」。但是代碼不提供所需的輸出。我試了很多來調試它,但不能。請幫助我如何找到素因子

+0

再次運行代碼意味着使用循環,例如使用循環, 'while'或'for'。 – TigerhawkT3

+0

你讓你的代碼複雜化,即使你自己也不明白,我建議你先寫一個isPrime函數來查看一個數是否爲素數,然後計算一個數的所有因子,看看它們中的哪一個是素數然後返回它們,約2個功能,每個功能5行。 – Arman

+0

@Arman是的,我已經做到了,解決了這個問題。但我真的很想知道我在上面的代碼中做了什麼錯誤。 – Primalr3d

回答

0

您缺少的難題的基本部分是yield運算符,這使得函數充當生成器並在運行循環時保持其位置。然而,要注意的關鍵是輸出將是一個發生器對象,必須循環以提取所需的輸出。

你舉的例子:

import math 

def fi_da_prfac(var): 
    z = range(2, math.ceil(var/2)+1) 
    z.append(var) 
    for t in z: 
     if var % int(t) == 0: 
      yield t 

prfac = yield_eg(15) 
[fac for fac in prfac] 

這是學習如何編寫一個不錯的問題,但是正如其他人提及有更簡潔的預先製作的功能,如果你需要做到這一點。

Usherwood