2017-03-08 9 views
0

私は、角括弧のバランスが取れていないことをユーザーに伝えるコードを書いています。forループのpythonで複数の項目をチェックする

私のコードがどこに間違っているのか正確に伝えることができます。

ブラケットの最初の状況になると、間違ったものや他の正しいものを探し続けることはありません(私は思っています)。

私は(今のすなわち何派手なショートカット)シンプルですが、長い、それを維持したいん

あなたはreturnとすぐに何かがOKであるとして、あなたは見つけることができません場合はここに私のコード

def isbalanced(text): 
    openingbracket=[] 
    for i, next in enumerate (text): 
     if next=='(' or next=='{' or next=='[': 
      openingbracket.append(next) 
     if next==')' or next=='}' or next==']': 
      if len(openingbracket)==0: 
       print("ops only opening brackets") 
       return False 
      else: 
       a=openingbracket.pop() 
       if a =='(' and next==')': 
        print("its matched parenthesis") 
        return True 
       if a =='{' and next=='}': 
        print("its matched curly brackets") 
        return True 
       if a =='[' and next==']': 
        print("its matched square") 
        return True 
       else: 
        print("wrong closing brackets") 
        return False 
    if len(openingbracket): 
     print ("no closing brackets") 
     return False 
    else: 
     print("no brackets") 
     return True 
isbalanced("Hello()(]") 

答えて

0

を行い、インデックスを使用していないc

  • if next=='(' or next=='{' or next=='[':if c in "({[":
  • for i, next in enumerate (text):によって置き換えることができます使用します残りの文字列をチェックする前に、 Trueを返すことができることが分かっている唯一の時間は、文字列全体を処理した後です。したがって、return Trueはforループが終了した後でなければなりません。

    def isbalanced(text): 
        openingbracket=[] 
        for i, next in enumerate (text): 
         if next=='(' or next=='{' or next=='[': 
          openingbracket.append(next) 
         if next==')' or next=='}' or next==']': 
          if len(openingbracket)==0: 
           print("ops only opening brackets") 
           return False 
          else: 
           a=openingbracket.pop() 
           if a =='(' and next==')': 
            print("its matched parenthesis") 
            return True      # REMOVE THIS LINE 
           if a =='{' and next=='}': 
            print("its matched curly brackets") 
            return True      # REMOVE THIS LINE 
           if a =='[' and next==']': 
            print("its matched square") 
            return True      # REMOVE THIS LINE 
           else: 
            print("wrong closing brackets") 
            return False 
        if len(openingbracket): 
         print ("no closing brackets") 
         return False 
        else: 
         print("no brackets") 
         return True 
    isbalanced("Hello()(]") 
    
  • +0

    Thanks Christopher。私の頭の後ろに、間違っていました。それがうまくいったので、もうちょうどそれをつぶす必要があります。 – Coderflo

    2

    です文字列内の更なるエラーが...それはまさにあなたが3ヶ所でやっている:

    if a =='(' and next==')': 
        print("its matched parenthesis") 
        return True # let it continue to check the string. 
    

    は、あなたの方法の終わりにreturn Trueを追加します:ループが経由する場合は、文字列は別に

    (実際に、それはあなたの現在のコードですでにOKです)OKです:ビルトインだとのiterableから値を取得するために

    • は、あなたの変数にnextを使用しないでください。私はあなたがそれらが引き起こすので、全体のメソッドがTrueを返すために、単にあなたのreturn True文を削除だけfor c in text:
    +0

    すべての変更をすべての人が行いました。今度は、ループが実行された後で、一致していないカッコのインデックスを調べたいかどうかを調べます。私はin()([]私は3番目の括弧のインデックスを印刷したいと思いますが、これは匹敵しません、どうすれば実現できますか? – Coderflo

    関連する問題