效果图
目的:等号左侧任意给定数,右侧给定数,输出以左侧数字经过一定运算达到的等式。
源码
1 | from itertools import product |
原理
一句话:通过排列组合的方式,遍历所有可能性,输出符合条件的表达式。
代码具体分析:
a1, a2, a3, a4, a5, a6 = a.split(' ')
链式赋值l = list(product(i, repeat=5))
这行代码的意思是将“+-*/空格”进行排列组合(自身笛卡尔积),遍历其组成5个元素时的排列组合所有情况(因为a1到a6之间的间隙为5,所以这里repeat次数为5)。
简单的案例:
1 | import itertools |
输出结果:AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD
函数具体理解:
product 用于求多个可迭代对象的笛卡尔积(Cartesian Product)。
特性:product(A, B) 等价于 ((x,y) for x in A for y in B)。
一般使用形式:
itertools.product(*iterables, repeat=1)
iterables是可迭代对象,repeat指定iterable重复几次。
相关链接:
后记
这是人工智能课(我的选修课,不是我的专业课)上布置的小作业,作业具体要求是:
请在数字之间填上加减乘除或者空这五种符号,让等式可以成立,1 2 3 … 9 = 2008(空符号就是把两位或多位数字合成一个数字)
作业源码:
1 | from itertools import product |
输出结果:
1+2+345*6+7-8*9 = 2008
1+2+345*6-7*8-9 = 2008