Создание функции и вызов двух разных результатов из нее. Как я это сделал - PullRequest
1 голос
/ 18 апреля 2020

Я пытаюсь проверить баланс уравнения совпадения. Код ниже это то, что у меня есть в настоящее время.

#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

Следует сказать, что первое - ИСТИНА, а второе - ЛОЖЬ. Что я делаю сейчас неправильно?

1 Ответ

2 голосов
/ 18 апреля 2020

Вы должны использовать 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) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...