КОД SNIPPET 1: генерирует все возможные наборы скобок
class Parenthesis(object):
def __init__(self, parens):
self.parens = parens
self.my_valid_parens = {
1: ['()'],
2: ['()','()'],
}
def generate_valid_paren(self):
if self.parens <= 2:
return self.my_valid_parens[self.parens]
i = 3
while i <= self.parens:
new_set = []
for each in self.my_valid_parens[i-1]:
new_set += set([each + '()', '()' + each, '(' + each + ')'])
self.my_valid_parens[i] = list(new_set)
i += 1
if __name__ == '__main__':
num = 4
p = Parenthesis(num)
p.generate_valid_paren()
print("linesep")
print (p.my_valid_parens[num])
Проблема с кодом 1 заключается в том, что выход генерируется дважды после 5-го выхода.Как это можно исправить?
КОД SNIPPET 2: генерирует все возможные комбинации значений путем изменения логических «&» и «|»operator
def insert():
operands = [ 0, 0, 0, 1]
type(operands)
operators = ['|', '&']
type(operators)
for opers in product(operators, repeat=len(operands) - 1):
formula = [str(operands[0])]
for op, operand in zip(opers, operands[1:]):
formula.extend([op, str(operand)])
formula = ' '.join(formula)
print('{} = {}'.format(formula, eval(formula)))
print(" ")
Может кто-нибудь предложить мне способ объединения этих кодов, чтобы выходные данные могли быть примерно такими ((0 | 0) | (0 & 1)) = 0, т.е. переменные выражения имеют всевозможные сгенерированные скобки, т.е. полученные выше?