要在数字之间加上+-* /以及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做数学难题?
答案 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等。