在Python中产生通用乘法问题

时间:2018-07-13 05:19:59

标签: python math

到目前为止,我已经创建了生成5个变量(其中“ o”是变量)乘法问题的代码,以便显示分组符号的每种可能组合。到目前为止,这种方法还不错,但是如果我要更改变量数(例如更改为6或3),则需要在最后一个变量的末尾添加另一个几乎相同的for循环。我正在尝试找到一种方法,它将根据用户输入的变量自动执行此操作。

group = []
a = '( o * o )'

for i in range(len(a)):
    if a[i] == 'o':
        b = (a[:i] + a + a[i+1:])
        for l in range(len(b)):
            if b[l] == 'o':
                c = (b[:l] + a + b[l+1:])
                for j in range(len(c)):
                    if c[j] == 'o':
                        d = (c[:j] + a + c[j+1:])
                        group.append(d)
group = list(set(group))
for i in range(len(group)):
    print(group[i])       

输出:

( ( o * ( o * ( o * o ) ) ) * o )
( ( o * o ) * ( o * ( o * o ) ) )
( o * ( ( o * o ) * ( o * o ) ) )
( ( o * ( ( o * o ) * o ) ) * o )
( ( ( o * ( o * o ) ) * o ) * o )
( ( ( o * o ) * o ) * ( o * o ) )
( o * ( ( ( o * o ) * o ) * o ) )
( o * ( ( o * ( o * o ) ) * o ) )
( ( o * o ) * ( ( o * o ) * o ) )
( ( ( ( o * o ) * o ) * o ) * o )
( o * ( o * ( o * ( o * o ) ) ) )
( o * ( o * ( ( o * o ) * o ) ) )
( ( ( o * o ) * ( o * o ) ) * o ) 
( ( o * ( o * o ) ) * ( o * o ) )

1 个答案:

答案 0 :(得分:1)

使用递归。请注意,参数n表示深度级别,并且由于原子组( o * o )中有两个变量,因此n应该比希望获得的变量数少2。乘法组组合。

a = '( o * o )'
def g(n):
    if n == 0:
        return {a}
    r = set()
    for b in g(n - 1):
        for i in range(len(b)):
            if b[i] == 'o':
                r.add(b[:i] + a + b[i + 1:])
    return r
for n in range(5):
    print(g(n))

这将输出:

{'( o * o )'}
{'( ( o * o ) * o )', '( o * ( o * o ) )'}
{'( ( ( o * o ) * o ) * o )', '( ( o * o ) * ( o * o ) )', '( o * ( o * ( o * o ) ) )', '( o * ( ( o * o ) * o ) )', '( ( o * ( o * o ) ) * o )'}
{'( ( ( o * o ) * ( o * o ) ) * o )', '( ( o * o ) * ( ( o * o ) * o ) )', '( o * ( o * ( o * ( o * o ) ) ) )', '( ( ( o * ( o * o ) ) * o ) * o )', '( ( o * o ) * ( o * ( o * o ) ) )', '( ( o * ( o * o ) ) * ( o * o ) )', '( o * ( o * ( ( o * o ) * o ) ) )', '( ( o * ( o * ( o * o ) ) ) * o )', '( ( ( o * o ) * o ) * ( o * o ) )', '( o * ( ( o * o ) * ( o * o ) ) )', '( ( o * ( ( o * o ) * o ) ) * o )', '( ( ( ( o * o ) * o ) * o ) * o )', '( o * ( ( ( o * o ) * o ) * o ) )', '( o * ( ( o * ( o * o ) ) * o ) )'}
{'( o * ( ( ( o * o ) * ( o * o ) ) * o ) )', '( ( ( o * ( o * o ) ) * ( o * o ) ) * o )', '( ( o * o ) * ( o * ( o * ( o * o ) ) ) )', '( ( ( o * o ) * o ) * ( o * ( o * o ) ) )', '( ( ( o * o ) * o ) * ( ( o * o ) * o ) )', '( ( ( o * ( o * o ) ) * o ) * ( o * o ) )', '( o * ( ( ( ( o * o ) * o ) * o ) * o ) )', '( o * ( o * ( o * ( ( o * o ) * o ) ) ) )', '( ( o * o ) * ( ( o * o ) * ( o * o ) ) )', '( ( o * o ) * ( o * ( ( o * o ) * o ) ) )', '( ( o * ( o * o ) ) * ( ( o * o ) * o ) )', '( ( ( ( o * o ) * o ) * ( o * o ) ) * o )', '( ( o * ( ( o * ( o * o ) ) * o ) ) * o )', '( ( ( o * ( ( o * o ) * o ) ) * o ) * o )', '( o * ( ( ( o * o ) * o ) * ( o * o ) ) )', '( ( ( ( ( o * o ) * o ) * o ) * o ) * o )', '( o * ( ( o * ( o * ( o * o ) ) ) * o ) )', '( ( ( o * o ) * ( o * o ) ) * ( o * o ) )', '( o * ( ( ( o * ( o * o ) ) * o ) * o ) )', '( o * ( o * ( o * ( o * ( o * o ) ) ) ) )', '( ( ( o * ( o * ( o * o ) ) ) * o ) * o )', '( ( o * ( o * o ) ) * ( o * ( o * o ) ) )', '( ( ( ( o * o ) * ( o * o ) ) * o ) * o )', '( ( ( o * o ) * ( o * ( o * o ) ) ) * o )', '( ( o * ( o * ( ( o * o ) * o ) ) ) * o )', '( ( o * ( ( ( o * o ) * o ) * o ) ) * o )', '( ( ( o * o ) * ( ( o * o ) * o ) ) * o )', '( ( o * o ) * ( ( o * ( o * o ) ) * o ) )', '( ( o * ( ( o * o ) * o ) ) * ( o * o ) )', '( o * ( o * ( ( o * o ) * ( o * o ) ) ) )', '( ( o * ( ( o * o ) * ( o * o ) ) ) * o )', '( o * ( o * ( ( o * ( o * o ) ) * o ) ) )', '( ( o * ( o * ( o * o ) ) ) * ( o * o ) )', '( ( o * o ) * ( ( ( o * o ) * o ) * o ) )', '( o * ( o * ( ( ( o * o ) * o ) * o ) ) )', '( o * ( ( o * ( o * o ) ) * ( o * o ) ) )', '( o * ( ( o * o ) * ( ( o * o ) * o ) ) )', '( o * ( ( o * o ) * ( o * ( o * o ) ) ) )', '( ( o * ( o * ( o * ( o * o ) ) ) ) * o )', '( o * ( ( o * ( ( o * o ) * o ) ) * o ) )', '( ( ( ( o * ( o * o ) ) * o ) * o ) * o )', '( ( ( ( o * o ) * o ) * o ) * ( o * o ) )'}