Что происходит с этой сбалансированной проблемой с пареном? не получая результатов и ошибок - PullRequest
0 голосов
/ 26 апреля 2020

Я не получаю никаких ошибок или результатов, поэтому не могу точно определить проблемы. Он основан на структуре данных стека.

def is_match(p1, p2):
    return (p1,p2) in ['(,)', '{,}', '[,]']

def is_open(param):
    return param in '([{'

def is_balanced(exp):
    stack = []
    for i in range(len(exp)):
        if is_open(exp[i]):
            stack.append(exp[i])
        else:
            top = stack.pop()
            if not is_match(top,str(exp[i])):
                return False

    if stack == []:
        return True
    else:
        return False


is_balanced('{[}')

1 Ответ

2 голосов
/ 26 апреля 2020

Прежде всего, вы ничего не печатаете. Ваша функция всегда возвращает False, но без print результат отбрасывается.

Во-вторых, у вас есть ошибки c. Наиболее очевидным является то, что ('(', ')') никогда не равно '(,)'. И если вы не проверяете, является ли стек пустым во время всплывающего окна, то в случае ввода, например '}', вы получите ошибку. И str(exp[i]) является избыточным, exp[i] уже является строкой. Наконец,

if condition:
    return True
else:
    return False

является антипаттерном; Вы можете просто сказать return condition (или, если это не логическое значение, и вы хотите, чтобы оно было, return bool(condition); в этом случае не требуется, так как результат сравнения на равенство всегда является логическим).

...