Pilhas podem ser implementadas em Python por meio de listas ...
pilha01 = ['a4', 'a3', 'a2', 'a1'] # o elemento 'a1' está # no topo da pilha
pilha02 = ['b2', 'b1'] # o elemento 'b1' está no topo da pilha
Considere uma função Python, chamada unifica, que recebe duas pilhas como parâmetros e retorna uma terceira, que é o resultado da intercalação dos elementos das duas pilhas recebidas como parâmetros. Um programa Python chamou essa função unifica, passando como parâmetros as duas pilhas do exemplo acima (pilha01 e pilha02). O resultado da intercalação foi a pilha
['a4', 'a3', 'b2', 'a2', 'b1', 'a1']
Qual implementação da função unifica realiza o que foi descrito acima?
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é a D.
Esta questão aborda o conceito de pilhas e como elas podem ser implementadas e manipuladas em Python utilizando listas. Uma pilha é uma estrutura de dados onde o último elemento a ser inserido é o primeiro a ser removido, o que também é conhecido como comportamento LIFO (Last-In, First-Out).
No contexto desta questão, você precisa compreender como os métodos append e pop funcionam em listas do Python. O método append adiciona um elemento ao final da lista, enquanto o método pop remove o último elemento da lista e o retorna.
A função unifica deve intercalar os elementos de duas pilhas, e a alternativa D realiza essa tarefa corretamente. Ela considera que as duas pilhas podem ter tamanhos diferentes, por isso utiliza a condição or no loop while, garantindo que todos os elementos de ambas as pilhas serão intercalados enquanto houver elementos em pelo menos uma das pilhas.
Além disso, o uso de duas verificações de tamanho com if len(p1) != 0 e if len(p2) != 0 antes de chamar o método pop assegura que a tentativa de remover um elemento de uma pilha vazia não ocorra, evitando um erro.
Por fim, a alternativa correta adiciona os elementos intercalados a uma lista temporária p3 e depois os transfere para a lista p4 usando outro loop while com pop. Isso é necessário porque a cada pop na lista p3, o elemento é removido do final, que é o topo da pilha na representação escolhida, invertendo a ordem dos elementos e assegurando que o resultado final esteja na ordem correta da intercalação desejada quando retornados na lista p4.
Essa abordagem é a que condiz com a descrição dada no enunciado da intercalação desejada, resultando na pilha ['a4', 'a3', 'b2', 'a2', 'b1', 'a1'].
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
GABARITO LETRA: D
pilha1 = ['a4', 'a3', 'a2', 'a1']
pilha2 = ['b2', 'b1']
def unifica(p1, p2):
p3 = [ ]
p4 = [ ]
while len(p1) > 0 or len(p2) > 0: //Roda enquanto pelo menos uma das pilhas tiverem tamanho maior que 0
if len(p1) != 0:
p3.append(p1.pop()) //Adiciona com 'append' no p3 pegando do p1 com 'pop' o último elemento da pilha
if len(p2) != 0:
p3.append(p2.pop()) // Em sequência faz a mesma coisa com p2
while len(p3) > 0:
p4.append(p3.pop()) //Já aqui a lista é colocada na p4 invertendo ela, caso contrario ela começaria com
return p4 // a1 já que foi o primeiro elemento a ser adicionado na p3
Letra A: Errado pois os primeiros While fará com que toda a pilha1 seja adicionada e depois toda a pilha2, e a questão mostra no resultado uma lista intercalando as duas.
Letra B: Errada pois a condição And no primeiro While impedirá que o laço execute até o último elemento da lista maior.
Letra C: A mesma coisa da letra B.
Letra E: A mesma coisa da letra A.
Cara, que zona de questão, as alternativas todas desorganizadas
oque fez eu matar a questão foi o OR, o while tem que rodar até que as duas listas estejam vazias
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo