![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 09.02.2022
Сообщений: 7
|
![]()
Доброго времени суток!
Хотелось бы узнать, в чем заключается моя ошибка и какие вообще советы могли бы вы мне, начинающему программисту на Python, собственно, дать. Суть программы(функции) вот в чем: она определяет правильную скобочную последовательность и выводит Yes or NO, соответсвенно. Также '' тоже будет являться верной скобочной последовательностью Я добавил пару переменных, чтоб проще для меня(но, к сожалению, не для читателя ![]() ![]() Ошибка вот в чем: Вводится: bracket_check("()") Видно, что верная последовательность, но программма все-равно выводит НЕТ Код:
Заранее всем огромное спасибо!! Принимаю любую объективную критику, хоть с ног до головы заливайте - без нее не будет прогресса) ![]() |
![]() |
![]() |
![]() |
#2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,427
|
![]()
Очень смущает этот for с if. Что вы хотели им проверить? Чтобы скобочная последовательность была верной, должно выполниться 2 условия: во всей строке количество открывающих и закрывающих скобок равно, на любой позиции строки количество уже встреченных открывающих скобок больше или равно количеству закрывающих. Примерно:
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 09.02.2022 в 04:25. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 09.02.2022
Сообщений: 7
|
![]()
BDA, Спасибо большое, я разобрался!! Своим for и if я хотел проверить догадку о следующей теории: Допустим, есть следующая скобочная последовательность: 1) "()" я брал, делил длину всей строки, попутно закидывая саму строку в список для удобства работы с ее элементами через доступ в позиции [0] и [1] в данном случае. Брал средних два числа, у одного просто вычитал, чтоб соответствовало порядку 0, 1, 2.... а не 1, 2, 3 и т.д. И вот, мы смотрим на эти два символа изнутри - ушки направлены в разные стороны(они разные), следовательно, пара будет верной. А в строках со скобочной последовательностью побольше я так же попарно их разбирал: 2) "((()))". Сначала мы, опять же, разбираем пару из цента, т.е "xx()xx" - верно? верно, идем дальше - теперь "x(xx)x"Я, закрыв предыдущую пару, разбираю следующую, равноудаленную от центра, и так , пока не дойдем до финишного. Просто глянул на примеры скобочных последовательностей и такой алгоритм проверки сам дошел ко мне в голову... может с более сложными случаями это будет не совсем корректно, но я выбрал именно такой вариант решения. Но благодаря вашему объяснению я понял задачу с другой стороны, более простой и логичной) Спасибо!
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 02.06.2021
Сообщений: 515
|
![]()
()() и ваш алгоритм ломается
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,367
|
![]()
Есть такая книжка:
А. Шень, Программирование: теоремы и задачи, 2004 В этой книге есть более общий алгоритм решения задачи со скобками. Когда-то, на этом форуме, выкладывал её решение на Pascal. Ну вот решил сделать и на Python. Код:
Открывающиеся скобки отправляем в стек, а закрывающиеся сравниваем со значением, которое выбирается с вершины стека. Предполагается, что анализируются скобки, которые занесены в словарь. Если в строке встречаются другие символы, то они пропускаются.
Как-то так, ...
|
![]() |
![]() |
![]() |
#6 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,427
|
![]()
Ну сам алгоритм обсудили выше (для вашего случая и для общего случая). Именно по вашему коду. Строка отлично индексируется и сама - test_string[0]. "[middle1] in ls" это не обращение к позиции, а проверка, что список, состоящий из одного числа middle1, присутствует в списке ls.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Прошу помощь в нахождении ошибки | Titanix652 | Помощь студентам | 0 | 30.04.2017 21:56 |
Задача о нахождении простых чисел в матрице | alexamazzing | Помощь студентам | 1 | 26.10.2012 02:11 |
Нужна помошь в нахождении ошибки | DeIVIiurg | Общие вопросы Delphi | 0 | 07.05.2012 17:31 |
Ошибки в функциях ввода-вывода (Си) | spirit_trapper | Помощь студентам | 2 | 28.12.2009 12:54 |
Помощь в классах и функциях. | Serror | Общие вопросы C/C++ | 11 | 10.10.2009 06:23 |