<p>如果您希望生成一个按照输出显示的字符串,这里有一个更简单的方法</p>
<p>下面是解决方案的解释</p>
<p>第1行:<code>y = [B* i + A + B* (n-(i+1)) for i in range(n)]</code>
为n个位置创建一个<code>'B'</code>字符串,同时用<code>A</code>替换第i个位置</p>
<p>第2行:<code>if len(y) == 1: return y[0]</code>
如果输出只是一个值,则只返回该值</p>
<p>第3行:<code>else: return ' + '.join('f('+'f('.join(list(i)[:-2] + [i[-2:]]) + ')'*(len(i)-1) for i in y)</code>
如果输出是一组带a的b,则将它们作为<code>f(</code>从列表中剥离每个字符,一次剥离一个字符,剩下最后两个字符。这些将合并为一个单独的集合。所有这些都将用<code>)</code>关闭n-1次</p>
<p>完整代码如下所示</p>
<pre><code>def general(A, B, n):
y = [B* i + A + B* (n-(i+1)) for i in range(n)]
if len(y) == 1:
return y[0]
else:
return ' + '.join('f('+'f('.join(list(i)[:-2] + [i[-2:]]) + ')'*(len(i)-1) for i in y)
print ('Usecase one')
print (general ('A','B',1))
print ('Usecase two')
print (general ('A','B',2))
print ('Usecase three')
print (general ('A','B',3))
print ('Usecase four')
print (general ('A','B',4))
print ('Usecase five')
print (general ('A','B',5))
</code></pre>
<p>其输出将为:</p>
<pre><code>Usecase one
A
Usecase two
f(AB) + f(BA)
Usecase three
f(Af(BB)) + f(Bf(AB)) + f(Bf(BA))
Usecase four
f(Af(Bf(BB))) + f(Bf(Af(BB))) + f(Bf(Bf(AB))) + f(Bf(Bf(BA)))
Usecase five
f(Af(Bf(Bf(BB)))) + f(Bf(Af(Bf(BB)))) + f(Bf(Bf(Af(BB)))) + f(Bf(Bf(Bf(AB)))) + f(Bf(Bf(Bf(BA))))
</code></pre>