当前位置:首页 > 新游发布 > 正文

Python破解24点游戏

问题描述:给定四个整数,任意使用加、减、乘、除和小括号,构造出一个表达式,使得其最终结果为24,并输出这四个数字所组成的所有表达式。例如:34-15/3-5=24代码'''combinations:获取列表任意长度的子集'''fromitertools...

问题描述:给定四个整数,任意使用加、减、乘、除和小括号,构造出一个表达式,使得其最终结果为24,并输出这四个数字所组成的所有表达式。例如:34-15/3-5=24代码'''co......

问题描述:

给定四个整数,任意使用加、减、乘、除和小括号,构造出一个表达式,使得其最终结果为24,并输出这四个数字所组成的所有表达式。

例如:

34-15/3-5=24

代码

'''combinations:获取列表任意长度的子集'''fromitertoolsimportcombinationsimportrefromnumpyimportrandomclassSolver:四则运算符ops=['+','-','*','/','--','//']对需要处理的数字或表达式组合进行降维,降到二维defdimensionality_reduction(self,nums):result=[]将两个表达式组合成一个新表达式defassemble(self,exp1,exp2,op):根据需要为表达式添加相应的括号@staticmethoddefadd_parenthesis(exp,is_necessary=False):检查表达式是否与结果相等,考虑到中间步骤的除法,因此不采用相等判断,而是采用计算值和目标值的绝对值是否符合某个精度@staticmethoddefcheck(exp,target,precision=0.0001):try:returnabs(eval(exp)-target)precisionexceptZeroDivisionError:returnFalse将输入的数字格式化为字典,数字的运算符为空格@staticmethoddefformat(nums):return[{'op':'','exp':str(num)}fornuminnums]生成以下标号为元素的列表index_list=[iforiinrange(len(exp_list))]使用下标得到原表达式组成最终的结果数组forgroup1incombination:group2=list(set(index_list)-set(group1))yield[[exp_list[g1]forg1ingroup1],[exp_list[g2]forg2ingroup2]]auto_input=Falseifauto_input:customer_input=(1,20,size=4)else:customer_input=list()customer_(input("请输入第一个数字:"))customer_(input("请输入第二个数字:"))customer_(input("请输入第三个数字:"))customer_(input("请输入第四个数字:"))task=Solver()answer=(customer_input)iflen(answer)==0:print('Nosolutions')else:forainanswer:print(a)

运行结果

请输入第一个数字:1请输入第二个数字:2请输入第三个数字:6请输入第四个数字:4(2-1)*4*6=244*6/(2-1)=24(2+6)*(4-1)=24

最新文章