2017-04-17 81 views
0

如果我有一個公式,(a + (b - c) d - e) f = 75,我怎麼可以迭代通過改變我的變量?如果直到f是唯一的數字[1,6],那麼將會有6!放置數字的方法,對嗎?所以我想我必須以某種方式增加我的變量。解決變量,如果你有方程和變量使用Python

假設/限制:

  • AF是唯一的整數[1,6]

  • 我使用Python和努力解決,而無需使用內置函數或庫

  • 使用6個嵌套for-loops來枚舉將a,b,c,d,e和f中的每一個設置爲值的所有方法1-6(部分我有一個問題達成諒解,如何組織)

  • 顯然只有一個置換,將解決這個特殊的公式

回答

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 

通過使用集合之間的差異,可以確保不會使用相同的值兩次。例如:

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

完美!正是我在找什麼! – geominded

1

可以使用itertools.permutations(文檔包含的代碼示例,如果你不想使用它直接):

>>> 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