Você está na página 1de 3

class Pilha():

'''
Classe geradora da etrutura de dados 'pilha'
'''

# Questão 1
def __init__(self, elementos=[]):
'Método constutor'

# Verificando se 'elementos' é uma lista


if type(elementos) != list:
# Exibindo erro sobre 'elementos' não ser lista
print('\n ATENÇÃO: Os elementos precisam ser passados
em lista.\n')

# Criando atributo para o conteudo da pilha


self.conteudoPilha = []

else:
# Criando atributo para o conteudo da pilha
self.conteudoPilha = elementos.copy()

# Definindo melhor texto para exibição


if self.conteudoPilha == []:
textoComplementar = 'vazia'
else:
textoComplementar = 'com os elementos'

# Informando criação da pilha e seus elementos


print(f' A pilha foi criada {textoComplementar}:
{self.conteudoPilha}')

return None

# Questão 6
def __add__(self, outraPilha):
"Método mágico soma 'self + outraPilha'"

# Verificando se a outra pilha é instância


# da classe Pilha
if type(outraPilha) != type(self):
return 'Objetos de tipos diferentes'

# Adicionando os elementos da outra pilha


# nesta pilha
elementosNovaPilha = self.getPilha() + outraPilha.getPilha()

# Criando nova pilha


novaPilha = Pilha(elementosNovaPilha)

return novaPilha

# Questão 2
def empilhar(self, elemento=None):
'Adicionando o elemento dado ao topo da pilha'
# Verificando se elemento foi dado
if elemento == None:
print('Empilhamento não realizado. Elemento não
informado!')
return None

# Adicionando o elemento no topo da pilha


self.conteudoPilha.append(elemento)
# ou então: self.conteudoPilha += [elemento]
# ou então: list.append(self.conteudoPilha, elemento)

return None

# Questão 3
def desempilhar(self):
'Removendo o elemento do topo da pilha'

# Verificando se a pilha esta vazia


if self.conteudoPilha == []:
print('\n ATENÇÃO: A pilha já esta vazia!\n')
return None

# Removendo o elemento do topo da pilha


self.conteudoPilha.pop()

# Verificando se a pilha esta vazia


if self.conteudoPilha == []:
print('\n ATENÇÃO: A pilha ficou vazia!\n')

# Definindo saida da função


saida = None

else:
# Obtendo o elemento atual do topo
elementoTopo = self.conteudoPilha[-1]

# Definindo saída da função


saida = elementoTopo

return saida

# Questão 4
def getPilha(self):
'Obtendo a pilha em forma de lista'

# Obtendo uma copia do conteudo da pilha


copiaConteudo = self.conteudoPilha.copy()

return copiaConteudo

# Questão 5
def lenPilha(self):
'Retorna o tamanho da pilha'

# Obtendo tamanho da pilha


tamanhoPilha = len(self.conteudoPilha)
return tamanhoPilha

# Questão 7 (Sessão de testes)


if __name__ == '__main__':
# 7.a) Criando duas instancias da classe Pilha
p1 = Pilha([1,7,9])
p2 = Pilha()
print(f'\na)As duas pilhas criadas {p1} e {p2}')

# 7.b) Criando uma pilha passando um inteiro como


# parametro
p3 = Pilha(10)
print(f'\nb)Pilha p3 criada a partir de um inteiro:
{p3.getPilha()}')
# Resposta: Sim, foi criada uma instâcia de Pilha
# só que vazia

# 7.c) Empilhando na pilha p2 e obtendo seus elementos


p2.empilhar(4)
p2.empilhar(10)
print(f'\nc)Pilha p2 após empilhamentos: {p2.getPilha()}')
# Resposta: [4,10]

# 7.d) Desempilhando a pilha p2 até ficar vazia


while p2.desempilhar() != None:
print(f'\nd)Pilha p2 após o desempilhamento: {p2.getPilha()}')
pass # Apenas esperando a pilha ficar vazia
# Resposta: Sim, o primeiro desempilhado foi 10.

# 7.e) Adicionando o elemento 5 à pilha p2


p2.empilhar(5)

# 7.f) Criando nova pilha com a uniao dos elementos


# de p2 e p1
p3 = p2 + p1
print(f'\nf.1) Pilha p3: {p3.getPilha()}\n')
# Resposta: Verificado, elementos de p2 abaixo de p1

p4 = p1 + p2
print(f'\nf.2)Pilha p4: {p4.getPilha()}')
# Resposta: Verificado, elementos de p1 abaixo de p2

# 7.g) Verificando tamanho da pilha p3


print(f'\ng)Tamanho da lista p3: {p3.lenPilha()}')
# Resposta: O tamanho está correto

Você também pode gostar