【问题标题】:The code needed to be joined in order to get a output needed需要加入代码才能获得所需的输出
【发布时间】:2018-05-31 08:16:14
【问题描述】:

代码片段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 次输出后生成了两次。 如何纠正?

代码片段 2:通过更改逻辑“&”和“|”生成所有可能的值组合运营商

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,即表达式变量具有所有可能生成的括号,即在上面获得的?

【问题讨论】:

    标签: python expression logical-operators brackets


    【解决方案1】:

    对于问题的第一部分,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])
    

    对于第二部分,我仍然无法理解您要实现的目标,您能否从上面的代码中给出示例。

    【讨论】:

    • 第二个代码,如果你能告诉我你想要的输出,例如第一个代码的输出是'((()))'、'(())()'、'()(())'、'()()()'、'(()())'。你想如何将第二个代码输出放在第一个?
    • 我需要这样的输出 (a | ( b | c )) | ( d ) 其中 a, b, c, d 可以是 0 或 1
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    相关资源
    最近更新 更多