【问题标题】:Program to check balanced brackets for equation程序来检查方程的平衡括号
【发布时间】:2021-07-07 20:50:27
【问题描述】:

我正在尝试编写一个程序来检查方程式的平衡括号,我的程序正在检查括号,但它只寻找括号并且只为括号给出正确的答案,但为方程式给出不同的答案

我的预期输出是

exp1 = "(2+3)+(1-5)" # True
exp2 = "((3*2))*(7/3))" # False
exp3 = "(3*5))]" # False

下面是我的程序:

def is_valid(myStr):
  """ Check the orders of the brackets
      Returns True or False
  """
  opening = ['(', '[', '{']
  closing = [')', ']', '}']
  stack = []
  for i in myStr:
    if i in opening:
        stack.append(i)
    elif i in closing:
        pos = closing.index(i)
        if ((len(stack) > 0) and
            (opening[pos] == stack[len(stack)-1])):
            stack.pop()
        else:
            return False
    if len(stack) == 0:
        return True
    else:
        return False
  return 

我的程序对上述所有方程都返回 False,我在哪里做错了。

【问题讨论】:

  • 最后一个 if - else 条件需要在 for 循环之外。

标签: python python-3.x stack logic


【解决方案1】:

发现了一些错误和改进。

PS:变量i,j最好不要使用,而是一些有意义的名字,比如ele,element等。

def is_valid(myStr):
    """ Check the orders of the brackets
      Returns True or False
  """
    opening = ['(', '[', '{']
    closing = [')', ']', '}']
    stack = []
    for i in myStr:
        if i in opening:
            stack.append(i)
        elif i in closing:
            pos = closing.index(i)
            if ((len(stack) > 0) and
                    (opening[pos] == stack[-1])):
                stack.pop()
            else:
                stack.append(i)
        else:
            pass
    if len(stack) == 0:
        return True
    else:
        return False


print(is_valid('(2+3)+(1-5)'))
print(is_valid('((3*2))*(7/3))'))
print(is_valid('(3*5))]'))
# True
# False
# False

【讨论】:

    【解决方案2】:

    程序中检查堆栈长度是否为 0 的最后一个 if-else 语句应该在 for 循环之外。我已经更改了代码供您参考,并用您的示例进行了检查。效果很好。

    def is_valid(myStr):
    opening = ['(', '[', '{']
    closing = [')', ']', '}']
    
    stack = []
    for i in myStr:
        if i in opening:
            stack.append(i)
            print(stack)
        elif i in closing:
            pos = closing.index(i)
            if ((len(stack) > 0) and
                (opening[pos] == stack[len(stack)-1])):
                stack.pop()
            else:
                return False
    if len(stack) == 0:
        return True
    else:
        return False
    

    【讨论】:

      猜你喜欢
      • 2019-01-12
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      • 2015-05-01
      • 2022-08-13
      • 2019-11-01
      • 2011-02-12
      • 1970-01-01
      相关资源
      最近更新 更多