Проверка правильности расстановки скобок python

Программа на Python для проверки соответствия простых скобок

Я новичок Python, и я наткнулся на это упражнение, проверяя, равномерны ли простые скобки «(«, «)» в заданной строке. Я видел примеры здесь, используя команду стека, с которой я еще не встречался. Поэтому я попытался использовать другой подход. Может ли кто-нибудь сказать мне, где я ошибаюсь?

def matched(str): ope = [] clo = [] for i in range(0,len(str)): l = str[i] if l == "(": ope = ope + ["("] else: if l == ")": clo = clo + [")"] else: return(ope, clo) if len(ope)==len(clo): return True else: return False 

Идея состоит в том, чтобы нагромождать «(» и «)» в два отдельных списка, а затем сравнивать длину списков. У меня также была другая версия, в которой я добавил списки ope и clo с соответствующим i, который содержал (или) соответственно. Спасибо за ваше время!

Какие проблемы у вас с вашим кодом. Это не самое элегантное решение, но, похоже, с этим не так уж и много проблем . Возможно, вы захотите исправить отступ в def.

Ну, я не получаю разумного вывода. Вот образец. совпал («((jkl) 78 (A) & l (8 (dd (FJI :),) :)?)») = ([‘(‘, ‘(‘], [])

Конкретная проблема, с которой вы столкнулись, связана с тем фактом, что у вас есть тот обратный вызов сразу же, как только будет найден не () символ, и он вернет вам два списка (и)

Читайте также:  Start html and bootstrap

Да, я думаю, что ты прав. Это возвращение является проблемой. Я все еще пробираюсь вокруг, поэтому спотыкаюсь тут и там

Если вы хотите решить проблему правильно, вы также должны обратиться к случаю строки вроде «(())) (», которая содержит одинаковое количество (и), но не соответствует правильно.

Источник

Проверить правильность скобочной последовательности

Правильной скобочной последовательностью называется строка, состоящая только из символов «скобки» (открывающих «(» и закрывающих «)»), где каждой закрывающей скобке найдётся соответствующая открывающая. Например, () и (()()) — правильные последовательности, а (()(() или )( — нет.

Напишите функцию Bracket_check(), которая проверяет, является ли поступившая на вход строка правильной скобочной последовательностью. Если да, она должна печатать YES, в противном случае — NO. Обратите внимание, что пустая строка также является правильной скобочной последовательностью.
Пример 1
Ввод
()
Вывод
YES

Проверка скобочной последовательности
Делал проверку на скобочную последовательность (состоящую из круглых скобок) на правильность, но.

Корректность скобочной последовательности
Правильной скобочной последовательностью с 2n скобок называется такая последовательность, которая.

Проверить код на правильность
Подскажите, в чем ошибки? Я не понимаю, что значит точность. Куда ее подставлять? import.

Проверить правильность написания круглых скобок
Проверить правильность написания круглых скобок.питон

Проверить правильность написания заглавных букв в текстовом файле
Дан текстовый файл, состоящий из строк, каждая строка состоит из слов, разделенных пробелами.

Источник

Как проверить правильность скобок в Python

toadmin.ru

В этом руководстве вы научитесь проверять правильность скобок в Python.

Учитывая строку скобок, проверка правильности комбинации скобок является популярным вопросом на собеседовании по программированию. И в течение следующих нескольких минут вы изучите технику решения этого вопроса, а также закодируете функцию Python для проверки заданной строки.

В чем заключается проблема допустимых скобок?

Давайте начнем наше обсуждение с ответа на вопрос, что такое проблема допустимых скобок?

Дана строка, содержащая символы простых скобок, фигурных и квадратных скобок: () [] <>, вы должны проверить, допустима ли данная комбинация скобок.

Допустимая строка скобок удовлетворяет следующим двум условиям:

Вот несколько примеров допустимых и недопустимых строк в скобках.

test_str = "<>]" --> INVALID, ] was never opened test_str = "[<>]" --> VALID test_str = "[]" --> VALID test_str = "[]<>" --> VALID test_str = "[" --> INVALID, brackets closed incorrectly!

В нашем подходе к решению проблем стек — это структура данных, которая будет играть ключевую роль. Давайте рассмотрим основы стека в следующем разделе.

Новый взгляд на структуру данных стека

Стек представляет собой структуру данных по принципу «последним пришел — первым вышел» (LIFO), где вы можете добавлять элементы в верхнюю часть стека, а также удалять их из вершины стека.

Когда вы добавляете элемент в вершину стека, вы выполняете операцию push, когда вы удаляете элемент из вершины стека, вы выполняете операцию pop.

Мы будем использовать следующие два правила, чтобы составить набор операций, которые мы можем выполнять над строкой в ​​скобках.

  • Вставьте все открывающие скобки в стек.
  • Если вы столкнетесь с закрывающей скобкой, вытащите верхнюю часть стека.

Приступим к решению задачи проверки правильности скобок.

Как проверить правильность скобок

Суммируя все наблюдения из приведенных выше примеров, имеем следующее.

Проверьте длину строки скобок: если нечетная, строка недействительна.

Поскольку у каждой открывающей скобки должна быть закрывающая скобка, допустимая строка должна содержать четное количество символов. Если длина строки нечетная, можно сразу сделать вывод, что в ней недопустимая комбинация скобок.

# len(test_str) = 3 (odd); ] does not have an opening [ test_str = "<>]" # len(test_str) = 3 (odd); ( does not have a closing ) test_str = "[(]" # len(test_str) = 5 (odd); there's a spurious ) test_str = "<())>"

Далее, давайте посмотрим, как мы можем справиться, когда количество символов в строке четное.

Длина строки в скобках четная: что дальше?

Шаг 1: Проведите строку слева направо. Назовем строку test_str, а отдельные символы в строке char.

Step 3: Now, check if the next character (char) is an opening or a closing bracket.

Step 3.1: If it’s an opening bracket, push it again onto the stack.

Step 3.2: If you encounter a closing bracket instead, pop off the stack top, and proceed to step 4.

Step 4: Here again, there are 3 possibilities based on the value popped off the stack:

Step 4.1: If is an opening bracket of the same type, loop back to step 3.

Step 4.2: If it is an opening bracket of a different type, you can again conclude that it is not a valid parentheses string.

Step 4.3: The final possibility is that the stack is empty. Again, this is the case of an invalid string, as you’ve run into a closing bracket that doesn’t have a matching opening bracket.

Valid Parentheses String Examples Walkthrough

Now let’s take three examples and walk through the above steps.

📑 If you’ve already gotten the hang of how this works, feel free to skip to the next section.

#1. As a first example, let test_str = “

#2. In this second example, let test_str = “()]”

  • Первый символ ( — открывающая скобка; поместите его в стек.
  • Второй символ ) — закрывающая скобка; pop off the stack top, который оказывается ) — открывающая скобка того же типа. Переходите к следующему символу.
  • Третий символ ]— это закрывающая квадратная скобка, и вы должны снова вытолкнуть его из вершины стека. Однако, как видите, стек пуст, а это значит, что нет подходящей открывающей скобки. [. Hence, this string is invalid.

#3. In this final example, test_str = “”.

📌 I’ve put together the following flowchart outlining the steps in the valid parentheses checking problem. You may save it for quick reference!

In the next section, let’s see how to translate our concept to Python code.

Python Program to Check for Valid Parentheses

In Python, you can use the list to emulate a stack.

You can use the .append() method to add elements to the end of the list. This is similar to pushing to the top of the stack.

The .pop() method returns the last element from the list, and this is similar to the popping off the top of the stack – to remove the last-added element.

So you now know how to implement the push and pop operations on a Python list, emulating the stack.

As a next step, let’s answer the question: how to differentiate between opening and closing brackets?

Well, you can use a Python dictionary – with the opening brackets ‘’, ‘]’, ‘)’ в качестве значений. Вы можете использовать метод .keys() для доступа к отдельным ключам в словаре.

Давайте используем все, что мы узнали, для написания определения функции is_valid().

Понимание определения функции

Прочитайте следующую ячейку кода, содержащую определение функции. Вы можете видеть, что мы использовали шаги на блок-схеме в тандеме с приведенным выше объяснением.

Кроме того, мы также добавили строка документации включая:

  • краткое описание функции
  • аргументы в вызове функции
  • возвращаемые значения из функции

▶ Вы можете использовать help(is_valid) или is_valid.__doc__ для получения строки документации.

def isValid(test_str): '''Check if a given parentheses string is valid. Args: test_str (str): The parentheses string to be validated Returns: True if test_str is valid; else False ''' # len(test_str) is odd -> invalid! if len(test_str)%2 != 0: return False # initialize parentheses dict par_dict = ','[':']'> stack = [] for char in test_str: # push opening bracket to stack if char in par_dict.keys(): stack.append(char) else: # closing bracket without matching opening bracket if stack == []: return False # if closing bracket -> pop stack top open_brac = stack.pop() # not matching bracket -> invalid! if char != par_dict[open_brac]: return False return stack == []

Функция Python is_valid проверяет правильность строки в скобках и работает следующим образом.

  • Функция is_valid принимает один параметр, test_str, который является строкой в ​​скобках для проверки. Он возвращает True или False в зависимости от того, действительна ли строка test_str.
  • Здесь стек — это список Python, который эмулирует стек.
  • А par_dict — это словарь Python с открывающими скобками в качестве ключей и закрывающими скобками в качестве соответствующих значений.
  • При обходе строки, если мы сталкиваемся с каким-либо условием, которое делает строку в скобках недействительной, функция возвращает False и завершает работу.
  • После обхода всех символов в строке stack == [] проверяет, пуст ли стек. Если да, test_str действителен, и функция возвращает значение True. В противном случае функция возвращает False.

Теперь давайте продолжим и сделаем несколько вызовов функций, чтобы убедиться, что наша функция работает правильно.

str1 = '<>[]' isValid(str1) # Output: True str2 = '<((>' isValid(str2) # Output: False str3 = '[]' isValid(str3) # Output: True str4 = '[<)>]' isValid(str4) # Output: False str5 = '[[]>' isValid(str5) # Output: False

Из приведенного выше фрагмента кода мы можем сделать вывод, что функция работает так, как ожидалось!

Вывод 🧑‍💻

Вот краткое изложение того, что вы узнали.

  • Во-первых, вы познакомились с проблемой проверки правильности скобок.
  • Далее вы изучили подход к решению проблемы с использованием стека в качестве предпочтительной структуры данных.
  • Затем вы узнали, как проверить комбинацию скобок с помощью словаря Python: с открывающими скобками, ключами и соответствующими закрывающими скобками в качестве значений.
  • Наконец, вы определили функцию Python для проверки допустимости заданной строки в скобках.

В качестве следующего шага попробуйте закодировать проблему в онлайн-редакторе Python от toadmin.ru. Не стесняйтесь пересматривать это руководство, если вам нужна помощь!

Ознакомьтесь с другими руководствами по Python. Удачного кодирования!🎉

Источник

Оцените статью