2016-05-19 14 views
0
import itertools 

#p = input() 

def fac(n): 
    factorlist = [] 
    k = 1 
    while k < n+1: 
     if n % k == 0: 
      factorlist.append(k) 
      k+=1 
      continue 
     else: 
      k+=1 
      continue 
    print factorlist 
    return factorlist 

for a, b in itertools.combinations(factorlist,2): 
    if gcd(a,b) == 1: 
     print a,b 
     continue 
    else: 
     continue 

n=0 
while n<=100: 
fac(n) 
n+=1 

上記のコードでは、itertools.combinationを実行しようとすると、functionlistで返されてもfactorlistが定義されていないとエラーが表示され、印刷できますそれ。itertoolsによってリストが認識されない

+5

字下げは正しいですか?関数の外で 'factorlist'にアクセスしているようです。 – AKS

+1

[Pythonで関数外の変数を使用する](http://stackoverflow.com/questions/3905437/using-a-variable-outside-of-function-in-python)の可能な複製を受け入れることを覚えておいてください'x = run_5()'があるので、グローバルに使うために 'factorlist = fac()'を実行する必要があります。 –

答えて

0

まず関数を呼び出して、変数factorlistに値を取得する必要があります。これは、関数facのローカルスコープ内に存在しますが、グローバルには存在しません。これを修正するには、まずfacを実行し、戻り値を変数factorlist(主スコープ)に割り当てます。その後、エラーなしでforループを実行することができます:

factorlist = fac(some_value) 
for a, b in itertools.combinations(factorlist,2): 
    do_things 
関連する問題