0

#1. Дана строка, представляющая из себя некоторое выражение. Проверить корректность использования скобок в заданном выражении: #a. количество открывающихся скобок каждого вида должно соответствовать количеству закрывающихся скобок этого же вида; #b. порядок следования открывающихся и закрывающихся скобок должен быть верным.

l = "aaa(bc{def}(ggg(hh))"
a = []
braces = {']': '[', '}': '{', ')': '('}
for i in l:
    if i in braces.values():
        a.append(i)
        print(a)
    elif i in braces.keys():
        if len(a) == 0 or braces[i] != a.pop():
            print("Выражение неправильное")
            break
 else:
      if len(a) > 0:
          print("Выражение неправильное")
      else:
          print("Выражение правильное")

не могу понять почему в выводе ошибка:

['('] ['(', '{'] ['(', '('] ['(', '(', '('] 

Это вывод. Не могу понять почему не добавляет фигурную скобку

Iryna
  • 7
  • ['('] ['(', '{'] ['(', '('] ['(', '(', '('] Выражение неправильное Это вывод. Не могу понять почему не добавляет фигурную скобку – Iryna Feb 23 '23 at 12:14
  • Форматирование поправьте – MBo Feb 23 '23 at 12:22
  • @DanisПодозреваю, что ваше форматирование неверное, т.к. последний блок должен выполняться единожды после цикла. – MBo Feb 23 '23 at 15:12
  • Спасибо за помощь, но форматирование не помогло. Это задание с Udemy так делал преподаватель у нее по видео все работало , а у меня нет .Вот и стало интересно почему – Iryna Feb 23 '23 at 16:09
  • Запустила ее код тоже не работает – Iryna Feb 23 '23 at 16:15
  • 1
    Форматирование по-прежнему негодное. Если его исправить, код как-то работает, справедливо выводя ['(', '(', '('] Выражение неправильное. Фигурная скобка из стека уже удалена – MBo Feb 23 '23 at 16:31

2 Answers2

0

Немного подрихтовал вашу попытку:

l = "aaa(bc{def}(ggg(hh))"
a = []
braces = {']': '[', '}': '{', ')': '('} 
for i in l:
    print(a)
    if i in braces.values():
        a.append(i)
        print(a)
    elif i in braces.keys():
        if  len(a)>0 and braces[i] == a[-1]:
            a.pop()
        else:
            print("Выражение неправильное")
            break   
if len(a) > 0:
    print("Выражение неправильное")
else:
    print("Выражение правильное")

Результат:

[]
[]
[]
[]
['(']
['(']
['(']
['(']
['(', '{']
['(', '{']
['(', '{']
['(', '{']
['(', '{']
['(']
['(', '(']
['(', '(']
['(', '(']
['(', '(']
['(', '(']
['(', '(', '(']
['(', '(', '(']
['(', '(', '(']
['(', '(', '(']
['(', '(']
Выражение неправильное

Если на вход подать

l = "aaa(bc{def}(ggg(hh)))"

на выходе будет

[]
[]
[]
[]
['(']
['(']
['(']
['(']
['(', '{']
['(', '{']
['(', '{']
['(', '{']
['(', '{']
['(']
['(', '(']
['(', '(']
['(', '(']
['(', '(']
['(', '(']
['(', '(', '(']
['(', '(', '(']
['(', '(', '(']
['(', '(', '(']
['(', '(']
['(']
Выражение правильное

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

passant
  • 11,753
  • Огромное спасибо passant, вы мне очень помогли. Я только учусь и в свои 40+ уже тяжеловаты некоторые моменты, но я не сдаюсь))) нет ничего не возможного, главное иметь желание) – Iryna Feb 23 '23 at 16:57
  • Вам, как новичку на сайте, подскажу: https://ru.stackoverflow.com/help/someone-answers И желаю удачи в учебе. У меня бывали ученики и постарше, так что все у вас получиться ;-) – passant Feb 23 '23 at 17:14
-1

l должен быть списком чтобы фор работал а он просто строка.

  • В текущем виде ваш ответ непонятен. Пожалуйста, нажмите [edit] под сообщением, чтобы добавить больше подробностей, которые помогут другим понять, как он отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы в Справке. – Дух сообщества Feb 23 '23 at 16:51
  • 1
    Вы неправы - фор работает с последовательностями (sequence), а строка является последовательностью A for loop is used for iterating over a sequence (that is either a list, a tuple, a dictionary, a set, or a string) – MBo Feb 23 '23 at 16:51