Skip to content

Instantly share code, notes, and snippets.

@skatesham
Last active March 16, 2016 17:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save skatesham/cd18fb637c0b3545dc20 to your computer and use it in GitHub Desktop.
Save skatesham/cd18fb637c0b3545dc20 to your computer and use it in GitHub Desktop.
Questão de Estrutura de Dados - Entrega 5
import unittest
class Pilha():
def __init__(self):
self.lista = []
def empilhar(self, valor):
self.lista.append(valor)
def vazia(self):
return not bool(self.lista)
def topo(self):
return self.lista[-1]
def desempilhar(self):
if (self.lista):
return self.lista.pop(-1)
def esta_balanceada(expressao):
"""
Função que calcula se expressão possui parenteses, colchetes e chaves balanceados
O tempo em O(n) e espaço em O(n)
:param expressao: string com expressao a ser balanceada
:return: boleano verdadeiro se expressao está balanceada e falso caso contrário
"""
pilha = Pilha()
abrir = '([{'
fechar = ')]}'
if not (len(expressao)) :
return True
if len(expressao) == 1 and (expressao in abrir or expressao in fechar):
return False
else:
for caractere in expressao:
if caractere in abrir:
if caractere == '(':
pilha.empilhar(')')
if caractere == '[':
pilha.empilhar(']')
if caractere == '{':
pilha.empilhar('}')
else:
if caractere in fechar:
if pilha.vazia():
return False
if caractere != pilha.desempilhar():
return False
return pilha.vazia()
class BalancearTestes(unittest.TestCase):
def test_expressao_vazia(self):
self.assertTrue(esta_balanceada(''))
def test_parenteses(self):
self.assertTrue(esta_balanceada('()'))
def test_chaves(self):
self.assertTrue(esta_balanceada('{}'))
def test_colchetes(self):
self.assertTrue(esta_balanceada('[]'))
def test_todos_caracteres(self):
self.assertTrue(esta_balanceada('({[]})'))
self.assertTrue(esta_balanceada('[({})]'))
self.assertTrue(esta_balanceada('{[()]}'))
def test_chave_nao_fechada(self):
self.assertFalse(esta_balanceada('{'))
def test_colchete_nao_fechado(self):
self.assertFalse(esta_balanceada('['))
def test_parentese_nao_fechado(self):
self.assertFalse(esta_balanceada('('))
def test_chave_nao_aberta(self):
self.assertFalse(esta_balanceada('}{'))
def test_colchete_nao_aberto(self):
self.assertFalse(esta_balanceada(']['))
def test_parentese_nao_aberto(self):
self.assertFalse(esta_balanceada(')('))
def test_falta_de_caracter_de_fechamento(self):
self.assertFalse(esta_balanceada('({[]}'))
def test_falta_de_caracter_de_abertura(self):
self.assertFalse(esta_balanceada('({]})'))
def test_expressao_matematica_valida(self):
self.assertTrue(esta_balanceada('({[1+3]*5}/7)+9'))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment