需要连接代码才能获得所需的输出

时间:2018-05-31 08:16:15

标签: python expression logical-operators brackets

CODE 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次输出后生成两次。 如何纠正?

CODE SNIPPET 2:通过更改逻辑&#39;&#39;生成所有可能的值组合。和&#39; |&#39;操作

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&amp; 1))= 0即表达式变量具有所有可能生成的括号,即上面获得的?

1 个答案:

答案 0 :(得分:0)

对于问题的第一部分,valid_paren dict中的重复值导致模式在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])

对于第二部分,我仍然无法理解你想要实现的目标,你能不能从上面的代码中得到实例。