制作一个函数并从中调用两个不同的结果.我该怎么做



我正在尝试检查匹配方程式的平衡。下面的代码是我目前拥有的。

#Creating the math equation the use check_html on.
e = "10 - (3 + (2+1)*8)" 
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:
balanced = False
str1 = "10 - (3 + (2+1)*8)"
str2 = "10 - (3 + (2+1)*8))"
print ("is the first valid?", check_html(str1))
print ("is the second valid?", check_html(str2))
print("Is it balanced? ", balanced) 

该代码的输出是

is the first valid? None
is the second valid? None
Is it balanced?  True

它应该说第一个是TRUE,第二个是FALSE。我现在做什么不对。

在行中必须使用html_string而不是e

for symbol in html_string:  # `html_string` instead` of `e`

仅此而已。


BTW:最好在函数内部创建并使用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+')' )

如果您想在print()中使用check_html(),那么函数应该使用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) )

相关内容

最新更新