字符串处理 - 确定括号是否平衡

时间:2016-11-15 17:27:03

标签: python string brackets

我正在处理读取字符串输入的代码,并计算括号(使用打开和关闭的任意字符)是否平衡。目的是提示用户输入括号的数量作为字符串,因此编译器将计算其数量和类型(例如,如果它是'('')')。

我得到了提示:

  

提示1 :在开头引入两个初始化为零的计数器。   然后在循环中探索字符串的符号。对于目前   如果符号为left,则符号将'('计数器增加1,   否则,将“正确”增加1。计数器

     

提示2 :如果括号出现在a中,则调用字符串数学   数学公式。例如,字符串'()''(())()',   '(()())'是平衡的,而字符串'))(())((''())(()'   不是。

我的代码现在看起来像这样:

lefts =str(input("Please enter a left parenthesis: "))
rights =str(input("Please enter a right parenthesis: "))

#token parsing requires paying attention to the order of the parenthesis
def ptest(test): #testing with counters
    lefts = 0
    rights = 0
    balance = 0 #additional counter that will help us determine the amount of strings and their relation to each other 
    for c in test:
        if c == '(':
            balance += 1
            lefts += 1
        elif c == ')':
            balance -= 1
            rights += 1
    print ('testing "'+test+'"')
    print ('lefts='+str(lefts)+' rights='+str(rights))
    #if there will b a balance between the strings/parenthesis, they will possibly be balanced
    if balance == 0: print 'same number of open/close, possibly balanced'
    else: print 'different number of open/close, definitely not balanced'

ptest(test1)
ptest(test2)

我怎么能修改它才能起作用?

1 个答案:

答案 0 :(得分:0)

但我认为你部分误解了这个任务。

可以有很多括号,但不能再有")"比"("(最后两种类型的数量必须相等) 我认为,输入不仅包括括号

所以你应该建立一个循环(就像你做的那样)和

  1. 测试,char是否为支架
  2. 如果是一个支架,那么增加匹配计数器(你甚至可以有一个计数器,但用两个更容易理解
  3. 检查关闭计数器是否小于开口(如果没有,那么你可以打破循环,因为它不是数学的)
  4. 循环结束后,您必须检查循环中是否有错误或两个计数器不相等。在这两种情况下,字符串不是"数学",否则它是。
  5. 我可以在您的代码中执行此操作,但我认为,您应该单独执行此操作。大多数这些事情你已经完成了,但似乎你没有完全理解,你做了什么,必须做什么。