问题:输入任意的四个数字,这四个数字的取值范围:113,这个四个数经过任意的加、减、乘、除四则运算的结果是24,并输出这四个数所有的运算结果为24的可能计算方式组合。 例如,输入1,2,6,4 输出:46(21)26 (21)4624 (26)(41)24 ((21)6)424 代码:fromitertoolsimportcombinationsimportrefromnumpyimportrandomclassSolver:目标值target24四则运算符ops〔,,,,,〕definit(self,precisemodeFalse):self。preprecisemodeprecisemodedefsolution(self,nums):result〔〕groupsself。dimensionalityreduction(self。format(nums))forgroupingroups:foropinself。ops:expself。assemble(group〔0〕,group〔1〕,op)〔exp〕ifself。check(exp,self。target)andexpnotinresult:result。append(exp)return〔expstr(self。target)forexpinresult〕降维defdimensionalityreduction(self,nums):result〔〕iflen(nums)2:forgroupinself。group(nums,2):foropinself。ops:newgroup〔self。assemble(group〔0〕〔0〕,group〔0〕〔1〕,op)〕group〔1〕resultself。dimensionalityreduction(newgroup)else:result〔nums〕returnresult将两个表达式组合成一个defassemble(self,exp1,exp2,op):ifoporop:returnself。assemble(exp2,exp1,op〔0〕)ifopinr:exp1self。addparenthesis(exp1)exp2self。addparenthesis(exp2)ifself。preprecisemode:ifop:exp2self。addparenthesis(exp2)elifop:exp2self。addparenthesis(exp2,True)expself。convert(exp1〔exp〕opexp2〔exp〕,op)return{op:op,exp:exp}根据需要为表达式添加相应的括号staticmethoddefaddparenthesis(exp,isnecessaryFalse):if(isnecessaryandnotexp〔exp〕。isdigit())orexp〔op〕inr:result{exp:(exp〔exp〕),op:exp〔op〕}else:resultexpreturnresultstaticmethoddefcheck(exp,target,precision0。0001):try:returnabs(eval(exp)target)precisionexceptZeroDivisionError:returnFalse将表达式各项重新排序为等价的表达式staticmethoddefconvert(exp,op):ifopinr:patternr(〔〕(((。)d)〔〕((。)d)d))expexpelse:patternr(〔〕((。?)d))expexpresult。join(sorted(i〔0〕foriinre。findall(pattern,exp)))iflen(result)!len(exp):resultexpreturnresult〔1:〕将输入的数字格式化为字典staticmethoddefformat(nums):return〔{op:,exp:str(num)}fornuminnums〕staticmethoddefgroup(explist,counter):生成以下标号为元素的列表indexlist〔iforiinrange(len(explist))〕以下标号列表取出不重复的组合combinationlist(combinations(indexlist,counter))forgroup1incombination:group2list(set(indexlist)set(group1))yield〔〔explist〔g1〕forg1ingroup1〕,〔explist〔g2〕forg2ingroup2〕〕ifnamemain:autoinputFalseifautoinput:customerinputrandom。randint(1,20,size4)else:customerinputlist()customerinput。append(input(请输入第一个数字:))customerinput。append(input(请输入第二个数字:))customerinput。append(input(请输入第三个数字:))customerinput。append(input(请输入第四个数字:))taskSolver()answertask。solution(customerinput)iflen(answer)0:print(Nosolutions)else:forainanswer:print(a)