Last active
March 16, 2016 17:06
-
-
Save skatesham/cd18fb637c0b3545dc20 to your computer and use it in GitHub Desktop.
Questão de Estrutura de Dados - Entrega 5
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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