【问题标题】:Python: create permutation of variables and operatorsPython:创建变量和运算符的排列
【发布时间】:2013-06-24 09:52:08
【问题描述】:

这是一个非常简单的骰子游戏,规则如下:

  1. 在 1 到 100 之间选择一个数字
  2. 一次掷出三个骰子
  3. 通过滚动点和以下选项尽可能接近所选数字:

    • 加法、减法、乘法和/或
    • 将点乘以 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 中,我硬编码了部分可能的组合。

现在我正在寻找一种自动生成这些组合的算法,这样我就不必手动将它们全部写下来。

你会怎么做?

【问题讨论】:

  • 你是否考虑了超过 10 秒?
  • 然后将其总结并与您在问题中的尝试和错误放在一起。
  • 我刚刚用我目前所拥有的内容编辑了我的帖子

标签: python permutation


【解决方案1】:

你可以使用

python“迭代工具” http://docs.python.org/2/library/itertools.html

生成['+','-','*','a','b','c',10]的所有组合

这样您就可以获得所有可能的组合,然后过滤掉有效的表达式。 但它不会产生括号。

您可以添加['(',')'] 但这需要更多时间。

【讨论】:

  • 尝试在尝试中执行 eval 除非查看表达式是否正确
  • “做评估”是什么意思?
猜你喜欢
  • 2019-10-01
  • 2022-08-06
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多