创建一个函数并从中调用两个不同的结果

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


#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。我现在做错了什么。


皈依舞
浏览 79回答 1
1回答

冉冉说

你必须使用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()then 函数中使用,你应该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 = '(' + eprint("Is it balanced?", check_html(f) )
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Html5