2013-06-24 4 views
-2

변수와 연산자의 순열 생성 :파이썬 : 그것은 다음과 같은 규칙에 대한 아주 간단한 주사위 게임이다

  1. 한 번
  2. 에서 1 100

  3. 역할 세 오지 사이의 숫자를 선택를로 받기

    • 덧셈, 뺄셈, 곱셈 및/또는
    • ,745 : 롤형 점과 같은 옵션을 선택한 개수에 가능한 근접
    • 10

예로 포인트를 곱하면 1 :

Dice1 = 2, Dice2 = 3, Dice3 = 1, Chosen number = 5 

Possible calculations:   
     2 + 3 * 1 = 5 or 
     2 * 3 - 1 = 5 

예 2 :

내 프로그램의 목표는 점을 결합하기위한 최선의 방법을 찾는 것입니다
Dice1 = 6, Dice2 = 2, Dice3 = 2, Chosen number = 42 

Possible calculation: 
     (6*10) - (2*10) + 2 = 42 

및 운영자. 내가 지금까지 무엇을 가지고

:

import sys 
import operator 

a = int (sys.argv[1]) # Dice 1 
b = int (sys.argv[2]) # Dice 2 
c = int (sys.argv[3]) # Dice 3 
d = int (sys.argv[4]) # Number to reach 

class Calc(): 

    def __init__(self): 
     self.resultsdict = dict() 
     self.werte = dict() 
     permutations = [[a,b,c], [a,c,b], [b,a,c], [b,c,a], [c,a,b], [c,b,a]] 
     for p in permutations: 
      aa = int(p[0]) 
      bb = int(p[1]) 
      cc = int(p[2]) 
      self.compute(aa,bb,cc, d) 
     self.getBest(d, a, b, c) 

    def compute(self, a,b,c,d): 
     func = [a+b+c, a+b-c, a+b*c, (a+b)*c, (a-b)+c, a-(b+c), a-b-c, a-b*c, (a-b)*c, a*b+c, a*(b+c), a*b-c, a*(b-c), a*b*c] 
     func1 = ["a+b+c", "a+b-c", "a+b*c", "(a+b)*c", "(a-b)+c", "a-(b+c)", "a-b-c", "a-b*c", "(a-b)*c", "a*b+c", "a*(b+c)", "a*b-c", "a*(b-c)", "a*b*c"] 
     i = 0 
     while i < len(func): 
      dictkey = str(a)+str(b)+str(c)+ ", " +str(func1[i]) 
      if not func[i] < 0 : 
       self.resultsdict[dictkey] = abs(d-func[i]) 
       self.werte[dictkey] = func[i] 
      i += 1 

    def getBest(self, d, d1, d2, d3): 
     self.bestresults = dict() 
     keys = self.resultsdict.keys() 
     minval = 1000000000 
     for k in keys: 
      if int(self.resultsdict[k]) <= int(minval): 
       minval = int(self.resultsdict[k]) 
     print("THE BEST COMBINATION FOR REACHING " + str(d) + " WITH " + str(d1) + ", " + str(d2) + ", " + str(d3) + " HAS BEEN GAINED WITH REST: " + str(minval)) 
     for k in keys: 
      if int(self.resultsdict[k]) == int(minval): 
       ergebnis = self.werte[k] 
       print('\t' + "Combination: " + str(k) + ", Result: " + str(ergebnis)) 
t = Calc() 

FUNC에서 나는 가능한 조합의 일부를 하드 코딩.

이제 이러한 조합을 자동으로 생성하는 알고리즘을 찾고 있으므로 수동으로 모두 작성하지 않아도됩니다.

어떻게 하시겠습니까?

+2

10 초 이상 생각 했습니까? – tamasgal

+1

그런 다음 요약하고 질문에 대한 귀하의 시도와 오류를 함께 표시하십시오. – tamasgal

+0

방금 ​​내가 가지고있는 것과 함께 내 게시물을 편집했습니다 –

답변

0

당신은 당신이 모든 가능한 조합을 얻을 후 바로 올바른 표현을 필터링 할 수 있도록 ['+','-','*','a','b','c',10]

의 모든 조합을 genrate하는

파이썬 "itertools" http://docs.python.org/2/library/itertools.html

를 사용할 수 있습니다. 하지만 paranthesis가 생성되지 않습니다.

['(',')'] 을 포함 할 수 있지만 더 많은 시간이 소요됩니다.

+0

표현이 올바른지 확인하기 위해 시도를 제외하고 시도해보십시오. –

+0

"eval"로 무엇을 의미합니까? –

관련 문제