最开始题目理解错了,卡在80%调试了半天,最后理解下来是不管重复与否,输入的数字每个都用一次就行了。
m1=input().split()
n1='24'
def math(m,n): 
    x='+-*/' #初始化4种运算符号
    if len(m)==2: # 当m只剩两个数时计算结果并结束递归
        for j in range(4):
            # +和*还可以优化,这里遇到-和/要考虑一下顺序问题
            if eval(n+x[j]+m[0])==float(m[1]) or eval(n+x[j]+m[1])==float(m[0]): return True
    elif len(m)>2:
        for i in range(len(m)):
            m2=[] #初始化一个m2 递减用
            for i0 in range(len(m)):
                if i0!=i: m2+=[m[i0]]
            for j in range(4):
                n2 = eval(n+x[j]+m[i]) #计算上一个节点结果
                if math(m2,str(n2)): return True #递归计算,如果结果为真结束返回值并结束递归
if math(m1,n1): print('true')
else: print('false') #递归完都没有结果返回false