如何使用python3做数学难题?

时间:2018-08-13 04:36:09

标签: python-3.x

要在数字之间加上+-* /以及nth(square,third)根和括号(),结果为6。

{print('{0}    {0}    {0}    =  6'.format(str(i)))     for i in range(2,10) } 
2    2    2    =  6
3    3    3    =  6
4    4    4    =  6
5    5    5    =  6
6    6    6    =  6
7    7    7    =  6
8    8    8    =  6
9    9    9    =  6  

如何使用python3做数学难题?

1 个答案:

答案 0 :(得分:1)

可以用一种神经的方式看待这一点。但您可以从粗略的方法开始:

nums = '+-/*'
c = {i:eval('lambda x,y=None: x'+i+'x if y is None else x'+i+'y') for i in nums}

c.update({'sqrt':lambda x,y=None:x**(1/2),'cube':lambda x,y=None:x**(1/3)})

import re,random

def m(x,here=None):
    y = ' '+str(x)+' '
    x = int(x) if str(x).isalnum() else c[re.sub("(.*)\(.*","\\1",x)](int(re.sub("\\D","",x)))
    if here == None: here = [] 
    for j in nums:
        s = c[j](x)
        for k in nums:
            if s!=0 and c[k](x,s)==6: 
                h = y+k+'('+y+j+y+')'
                here.append(h.strip())
            if c[k](s,x)==6: 
                h = y+j+y+k+y
                here.append(h.strip())
    if len(here)==0:
        if c['sqrt'](x) ==int(c['sqrt'](x)): (m(f'sqrt({x})',here))
        else : (m(f'cube({x})',here))

    return random.choice(list(set(here)))

 {i:m(i) for i in range(2,10)}

{2: '2 * 2 + 2',
 3: '3 * 3 - 3',
 4: 'sqrt(4) * sqrt(4) + sqrt(4)',
 5: '5 +( 5 / 5 )',
 6: '6 *( 6 / 6 )',
 7: '7 -( 7 / 7 )',
 8: 'cube(8) * cube(8) + cube(8)',
 9: 'sqrt(9) * sqrt(9) - sqrt(9)'}

您可以删除random.choice选项以查看给定数字的所有组合,例如尝试6,我们可以有6-6 + 6,6 + 6-6,6 / 6 * 6等。