Вы должны использовать html_string
вместо e
в строке
for symbol in html_string: # `html_string` instead` of `e`
Вот и все.
Кстати: это было бы хорошо создавать и использовать Stack()
внутри функции - поэтому он создаст новый пустой стек при запуске функции с новой строкой.
РЕДАКТИРОВАТЬ: Полная функция
# --- functions ---
def check_html(html_string):
d = Stack()
balanced = True
for symbol in html_string:
if symbol == "(":
d.push(symbol)
elif symbol == ")":
if d.is_empty():
balanced = False
else:
d.pop()
if not d.is_empty(): # you forgot `()
balanced = False
print("Is it balanced? ", balanced)
# --- main ---
e = "10 - (3 + (2+1)*8)"
check_html(e)
check_html( e+')' )
Если вы хотите использовать check_html()
в print()
, тогда вам нужно использовать return balanced
of print()
# --- functions ---
def check_html(html_string):
d = Stack()
balanced = True
for symbol in html_string:
if symbol == "(":
d.push(symbol)
elif symbol == ")":
if d.is_empty():
balanced = False
else:
d.pop()
if not d.is_empty(): # you forgot `()
balanced = False
return balanced
# --- main ---
e = "10 - (3 + (2+1)*8)"
print("Is it balanced? ", check_html(e) )
print("Is it balanced? ", check_html( e+')' ) )
РЕДАКТИРОВАТЬ: полный рабочий пример с собственным классом Stack
# --- classes ---
class Stack:
def __init__(self):
self.data = []
def push(self, item):
self.data.append(item)
def pop(self):
return self.data.pop(-1)
def is_empty(self):
return len(self.data) == 0
# --- functions ---
def check_html(html_string):
d = Stack()
balanced = True
for symbol in html_string:
if symbol == "(":
d.push(symbol)
elif symbol == ")":
if d.is_empty():
balanced = False
else:
d.pop()
if not d.is_empty(): # you forgot `()
balanced = False
return balanced
# --- main ---
e = "10 - (3 + (2+1)*8)"
print("Is it balanced?", check_html(e) )
#print("Is it balanced?", check_html(e + ')') )
f = e + ')'
print("Is it balanced?", check_html(f) )
#print("Is it balanced?", check_html('('+e+')') )
f = '(' + e + ')'
print("Is it balanced?", check_html(f) )
#print("Is it balanced?", check_html('('+e) )
f = '(' + e
print("Is it balanced?", check_html(f) )