Циклы. Не могу понять в чем ошибка
#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("Выражение правильное")
не могу понять почему в выводе ошибка:
['('] ['(', '{'] ['(', '('] ['(', '(', '(']
Это вывод. Не могу понять почему не добавляет фигурную скобку
Ответы (2 шт):
Немного подрихтовал вашу попытку:
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)))"
на выходе будет
[]
[]
[]
[]
['(']
['(']
['(']
['(']
['(', '{']
['(', '{']
['(', '{']
['(', '{']
['(', '{']
['(']
['(', '(']
['(', '(']
['(', '(']
['(', '(']
['(', '(']
['(', '(', '(']
['(', '(', '(']
['(', '(', '(']
['(', '(', '(']
['(', '(']
['(']
Выражение правильное
Там еще возможны некоторые особые ситуации, но до их рассмотрения, я так понимаю, вы еще не дошли. Оставляю удовольствие их найти и исправить - вам.
l должен быть списком чтобы фор работал а он просто строка.