Циклы. Не могу понять в чем ошибка

Рейтинг: 0Ответов: 2Опубликовано: 23.02.2023

#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("Выражение правильное")

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

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

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

Ответы

▲ 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)))"

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

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

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

▲ -1

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