2017-01-27 8 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 

私はコーディングの初心者です。私は与えられた数の素因数分解を見つけるためのコードを書こうとしています。私たちがコードを分析するなら、私がしたいのは、因子を見つけたら、forループを再開したいということです。 t = 2からforループを開始します。私はそれを行う方法を見つけませんでした。だから私は最後に "t"を削除しました。しかし、コードは目的の出力を与えていません。私はそれをデバッグするのに多くを試みたができなかった。助けてください素因数を求めるには

+0

また、コードを実行するということはループを使用することを意味します。 「while」または「for」。 – TigerhawkT3

+0

コードを複雑にしても理解できない場合は、まず数値がプライムであるかどうかを調べるための 'isPrime'関数を書いて、数値のすべての要素を計算し、そのうちのどれがプライムであるかを調べ、それを返します。各5行で約2つの機能。 – 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

関連する問題