实现 1 原始
代码
from __future__ import division
import itertools as it
import random
class Calc24:
def __init__(self, a, b, c, d):
fmtList = [
"((%d%s%d)%s%d)%s%d",
"(%d%s%d)%s(%d%s%d)",
"(%d%s(%d%s%d))%s%d",
"%d%s((%d%s%d)%s%d)",
"%d%s(%d%s(%d%s%d))"]
opList = it.product(["+", "-", "*", "/"], repeat=3)
opList = [opList for opList in opList]
self.fmtList = fmtList
self.opList = opList
self.results = []
numList = [a, b, c, d]
numList = it.permutations(numList)
numList = set(numList)
for n in numList:
for op in self.opList:
for fmt in self.fmtList:
self._check(fmt, n, op)
def _check(self, fmt, nums, ops):
a, b, c, d = nums
op1, op2, op3 = ops
expr = fmt % (a, op1, b, op2, c, op3, d)
try:
result = eval(expr)
except ZeroDivisionError:
return
if result == 24.0000:
self.results.append(expr)
def __str__(self):
r = ""
for expr in self.results:
r += expr + " = 24" + "\n"
return r
def result_random_one(self):
i = random.choice(range(self.results.__len__()))
return self.results[i]
思想