Почему я получаю ошибку в стеке в Python? - PullRequest
1 голос
/ 20 июня 2020

Я написал приведенный ниже код в Python, но я получаю ошибки в массиве «стек» каждый раз, когда он говорит о стеке, кроме начального назначения. Ошибка: «Экземпляр 'list' не имеет члена 'pu sh'».

Чтобы уточнить, этот фрагмент кода должен проходить через каждый символ и проверять, является ли он открывающей скобкой. Он поместит sh в стек, открывающую скобку и я сопоставлю с помощью оператора if / else, чтобы увидеть, совпадают ли они парами. Если не совпадает, вернуть false.

Кто-нибудь знает, почему этот код выдает ошибки в стеке? Стеки для меня очень новы, и в них нет смысла. Это первый фрагмент кода, который я написал на Python, поэтому в моем синтаксисе тоже может быть ошибка.

Я взял предложение кода из видео о стеках и попытался перевести его на python, чтобы увидеть, как он работает. Код, который они использовали, был всего лишь руководством к тому, что должно произойти.

str = '()[(]())'
arr = ['(','[']
stack = []

for char in str:
    if char in arr:
        stack.push(char)  
    else:
        if stack.empty(): 
            top = stack.pop()
            break
        if(top == '[' and char != ']') or (top == '(' and char != ')'):
            break
return stack.empty()

1 Ответ

1 голос
/ 20 июня 2020

Ваша функция недействительна. Список в python не имеет ни push(), ни метода empty(). Вы должны изменить свой код, чтобы использовать append() и len(stack) вместо этих двух соответственно.

Измененный код будет выглядеть так -

str1 = '()[(]())'
str2 = '()[]()'
arr = ['(','[']


def check_parentheses(str):
    stack = []
    for char in str:
        if char in arr:
            stack.append(char)  
        else:
            # If our stack is empty, there's no closing bracket to match the opening one, hence invalid
            if not stack:        # Same as len(stack) == 0
                return "Invalid"
            else:
                # if closing bracket doesn't match opening bracket, then too it's invalid
                top = stack.pop()
                if(top=='[' and char != ']' or top == '(' and char != ')' ):
                    return "Invalid"
    # If all the above checks are passed, we can be sure that parentheses are valid and balanced :)
    return "Valid"


print(check_parentheses(str1))
print(check_parentheses(str2))

Вывод:

Invalid
Valid

Я предлагаю вам обратиться к python docs - list , чтобы получить дополнительную информацию о списках и методах, которые вы можете использовать для них.

Надеюсь, это поможет!

...