2017-04-17 23 views
0

方程式((a + (b - c) d - e) f = 75)を使用している場合、どのように変数を変更して反復することができますか?スルーfがユニークな数字[1,6]なら、6があります!数字を置く方法、そう?だから私は何とか変数を増やす必要があると思う。Pythonを使用して方程式と変数を使用する場合の変数の解答

仮定/制限事項:

  • AFは一意の整数[1,6]

  • 私のpythonを使用し、使用しなくても解決にしようとしているされている組み込み関数やライブラリ

  • a、b、c、d、e、およびfのそれぞれの値を1-6の値に設定するためのネストされたfor-loopsを使用します。あなたがそれを使用しない場合

  • はどうやらあなたはitertools.permutationsを使用することができます

答えて

1

これはセットを使用するためには良い機会のように思える:

In [17]: set1 = set([1,2,3,4,5,6]) 

In [18]: for a in set1: 
    ...:  for b in set1 - set([a]): 
    ...:   for c in set1 - set([a,b]): 
    ...:    for d in set1 - set([a,b,c]): 
    ...:     for e in set1 - set([a,b,c,d]): 
    ...:      for f in set1 - set([a,b,c,d,e]): 
    ...:       if (a + (b - c)*d - e)*f == 75: 
    ...:        print('found:', a, b, c, d, e, f) 
    ...:        break 
    ...:       
found: 4 6 2 3 1 5 

In [19]: (4+(6-2)*3-1)*5 
Out[19]: 75 

セットの違いを使用して、同じ値を2回使用しないようにします。例:

In [20]: set([1,2,3,4,5,6]) - set([1,5]) 
Out[20]: {2, 3, 4, 6} 
+0

完璧!まさに私が探していたもの! – geominded

1

この特定の方程式を解決する唯一の順列があります)整理する方法を理解発行(ドキュメントはコードサンプルが含まれています直接):

>>> def func(a, b, c, d, e, f): 
...  return (a + (b - c) * d - e) * f == 75 

>>> from itertools import permutations 

>>> next(filter(lambda x: func(*x), permutations(range(1, 7), 6))) 
(4, 6, 2, 3, 1, 5) 
+0

ありがとうございます!私は、順列関数を呼び出すことには興味がありませんが、関数に関するドキュメントは便利です!したがって、例ではまだ製品のような組み込みのPython関数を使用していますが、それが始まりです。 – geominded

関連する問題