Код должен быть объединен, чтобы получить необходимый вывод - PullRequest
0 голосов
/ 31 мая 2018

КОД 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, т.е. переменные выражения имеют всевозможные сгенерированные скобки, т.е. полученные выше?

1 Ответ

0 голосов
/ 31 мая 2018

для первой части вопроса, дубликаты значений в dict valid_paren, вызывающие повторение шаблона после 5 вхождений.ниже не будет возвращен повторяющийся шаблон.

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
            print(self.my_valid_parens)


if __name__ == '__main__':
    num = 4
    p = Parenthesis(num)
    p.generate_valid_paren()
    print("linesep")
    print (p.my_valid_parens[num])

Во второй части я все еще не могу понять, что вы пытаетесь достичь, можете ли вы привести пример из полученного из приведенного выше кода.

...