Python :: Aufgabe #52

1 Lösung Lösung öffentlich

Klammerebenen checken

Anfänger - Python von bibir - 03.09.2014 um 09:22 Uhr
Ein übergebener String enthält neben anderen (bedeutungslosen) Zeichen öffnende und schließende Klammern, wobei die Klammern rund(), eckig [] oder geschweift {} sein können.

In einem Programm/Skript ist zu überprüfen, ob Klammern korrekt gesetzt wurden. Dabei gilt:
- jede sich öffnende Klammer wird von einer Klammer gleicher Art wieder geschlossen
- jede sich schließende Klammer wurde von einer Klammer gleicher Art geöffnet
- ein Klammernpaar darf nicht durch andere Klammernpaare überschnitten werden

Beispiele:
(([[]])) => true
([)] => false
([]]) => false
(())) => false
(() => false
({[])} => false
Gar keine Klammern => true

Lösungen:

vote_ok
von m4x0r (110 Punkte) - 06.09.2014 um 15:15 Uhr
Quellcode ausblenden Python-Code
def check_brackets(expr):

    if not len(expr) % 2 == 0:
        return False

    stack = []
    associated_bracks = {'(': ')',
                         '[': ']',
                         '{': '}'}

    for i in range(0, len(expr)):
        c = expr[i]
        if c in associated_bracks.keys():
            stack.append(c)
        elif not stack or c != associated_bracks[stack.pop()]:
            return False

    return True

test_expressions = ['(([[]]))',
                    '([)]',
                    '([]])',
                    '(()))',
                    '(()',
                    '({[])}',
                    '']

for expr in test_expressions:
    print("'" + expr + "'", "=>", check_brackets(expr))