Python:创建变量和运算符的排列

2024-05-03 10:49:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  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:

^{pr2}$

我的程序的目标是找到最好的方法来组合点和运算符。在

到目前为止我所拥有的:

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中,可能组合的一部分是硬编码的。在

现在我正在寻找一种自动生成这些组合的算法,这样我就不用手动把它们都写下来了。在

你会怎么做?在


Tags: inselffordefsyskeysdicedict
1条回答
网友
1楼 · 发布于 2024-05-03 10:49:17

你可以用

python“itertools” http://docs.python.org/2/library/itertools.html

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

这样就可以得到所有可能的组合,然后过滤出有效的表达式。 但不会产生妄想症。在

您可以包括['(',')'] 但这需要更多的时间。在

相关问题 更多 >