Seja o seguinte programa Python:def contagem(s):     if len(...

Próximas questões
Com base no mesmo assunto
Q2383098 Programação
Seja o seguinte programa Python:

def contagem(s):
    if len(s)==0:        return 0
    return len(s[0])+contagem(s[1:])
txt = [ 'hoje', [ ['é', 'dia', 'de', 'prova' ] ], 'eu', [ [ 'vou', 'me', 'sair' ] ], [ 'bem' ] ]
print(contagem(txt))

O valor que será exibido no console quando esse código for executado é
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: B - 9

Este exercício é um exemplo clássico de recursão em Python, onde uma função é projetada para se chamar repetidamente até que uma condição base seja atendida. A função contagem(s) recebe uma lista s, verifica se ela está vazia, e em caso positivo, retorna 0, que é a nossa condição de parada. Se a lista não estiver vazia, a função retorna a soma do comprimento do primeiro elemento len(s[0]) com a chamada recursiva da função contagem para o restante da lista s[1:].

A solução do problema depende do entendimento de como a recursão desmembra a lista fornecida e soma os comprimentos dos seus elementos. O parâmetro txt é uma lista que contém strings e listas aninhadas, o que torna a questão um pouco mais complicada pois não estamos lidando apenas com elementos de um único nível.

Ao chamar contagem(txt), a função irá processar cada elemento da lista txt. Como txt possui elementos que são listas, a função irá chamar a si mesma para esses elementos. A contagem de caracteres das strings em cada nível da lista é feita somando-se o comprimento de cada string individualmente.

Para chegar ao resultado correto, vamos analisar a lista txt: - 'hoje' tem 4 caracteres, - a lista aninhada ['é', 'dia', 'de', 'prova'] tem 2 + 3 + 2 + 5 = 12 caracteres, mas como a lista está aninhada duas vezes, pegamos apenas o comprimento da lista interna, que é 1 (uma lista com um elemento), - 'eu' tem 2 caracteres, - a lista aninhada ['vou', 'me', 'sair'] tem 3 + 2 + 4 = 9 caracteres, mas novamente, consideramos o comprimento da lista interna, que é 1, - e finalmente, a lista ['bem'] tem 1 elemento com 3 caracteres. Somando todos esses resultados, obtemos 4 + 1 + 2 + 1 + 3 = 11. Contudo, a lista [['é', 'dia', 'de', 'prova']] está aninhada duas vezes, o que significa que a função contagem a tratou como uma lista com um único item. Por isso, o resultado correto é 4 + 1 (aninhado) + 2 + 1 (aninhado) + 3 = 9, o que corresponde à alternativa (B).

Este exercício testa o entendimento de listas aninhadas, recursão e contagem de caracteres em strings dentro de listas em Python. Ele reforça a importância de entender como a linguagem trata elementos aninhados e como funções recursivas processam listas e elementos de forma iterativa.

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

Questão braba! Contando sempre a primeira posição.

 [ 'hoje', [ ['é', 'dia', 'de', 'prova' ] ], 'eu', [ [ 'vou', 'me', 'sair' ] ], [ 'bem' ] ]

S[0] = hoje = 4 caracteres

[ ['é', 'dia', 'de', 'prova' ] ], 'eu', [ [ 'vou', 'me', 'sair' ] ], [ 'bem' ] ]

 S[0] = uma lista = 1 caracter

'eu', [ [ 'vou', 'me', 'sair' ] ], [ 'bem' ] ]

 S[0] = 'eu' = 2 caracteres

[ [ 'vou', 'me', 'sair' ] ], [ 'bem' ] ]

 S[0] = uma lista = 1 caracter

[ 'bem' ]

 S[0] = uma lista = 1 caracter

Questão que implementa recursividade.

Temos que ter atenção ao dado que está sendo passado a cada vez para o len, tendo em vista que:

1ª iteração - len('hoje') = 4

2ª iteração - len([ ['é', 'dia', 'de', 'prova' ] ]) = 1

3ª iteração - len('eu') = 2

4ª iteração - len([ [ 'vou', 'me', 'sair' ] ]) = 1

5ª iteração - len([ 'bem' ]) = 1

6ª iteração - o len é igual a 0 e ela volta.

Resultando em 9.

Gabarito: 9

A forma de pensar sobre iteratividade é a seguinte:

Contagem (s1.0) -- retorna tamanho do primeiro elemento mais contagem(lista menos 1º elemento)

Contagem (s2.0) -- retorna tamanho do primeiro elemento mais contagem(lista menos 1º elemento)

Contagem (s3.0) -- retorna tamanho do primeiro elemento mais contagem(lista menos 1º elemento)

Contagem (s4.0) -- retorna tamanho do primeiro elemento mais contagem(lista menos 1º elemento)

Contagem (s5.0) -- retorna tamanho do primeiro elemento mais contagem(lista menos 1º elemento)

#Agora que o len() de S é igual a zero, o programa começa a resolver o stack de cima pra baixo

5º len = 1

4º len = 1

3 º len = 2

2º len = 1

1º len = 4

4 + 1 + 2 + 1 + 1 = 9

Lembrando que o len() vai retornar apenas o número de elemento naqueles [colchetes] imediatos separados por vírgula. Se o elemento é um número, uma string ou um objeto não importa. O python apenas conta o número de endereços de memória armazenados naquela lista.

A forma de pensar sobre iteratividade é a seguinte:

Contagem (s1.0) -- retorna tamanho do primeiro elemento mais contagem(lista menos 1º elemento)

Contagem (s2.0) -- retorna tamanho do primeiro elemento mais contagem(lista menos 1º elemento)

Contagem (s3.0) -- retorna tamanho do primeiro elemento mais contagem(lista menos 1º elemento)

Contagem (s4.0) -- retorna tamanho do primeiro elemento mais contagem(lista menos 1º elemento)

Contagem (s5.0) -- retorna tamanho do primeiro elemento mais contagem(lista menos 1º elemento)

#Agora que o len() de S é igual a zero, o programa começa a resolver o stack de cima pra baixo

5º len = 1

4º len = 1

3 º len = 2

2º len = 1

1º len = 4

4 + 1 + 2 + 1 + 1 = 9

Lembrando que o len() vai retornar apenas o número de elemento naqueles [colchetes] imediatos separados por vírgula. Se o elemento é um número, uma string ou um objeto não importa. O python apenas conta o número de endereços de memória armazenados naquela lista.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo