1
resposta

[Projeto] Livros em estoque

from typing import Dict, List


livros = [
    {"nome": "1984", "estoque": 5},
    {"nome": "Dom Casmurro", "estoque": 0},
    {"nome": "O Pequeno Príncipe", "estoque": 3},
    {"nome": "O Hobbit", "estoque": 0},
    {"nome": "Orgulho e Preconceito", "estoque": 2}
]

def exibir_livros(livro: dict) -> str:
    return f'Livro disponível: {livro["nome"]}. (Estoque disponível: {livro["estoque"]})'

def livros_disponiveis(livros: list[Dict]) -> list[Dict]:
    disponiveis = []
    for livro in livros:
        if livro["estoque"] == 0:
            continue
        disponiveis.append(livro)
    return disponiveis

def exibir_livros_em_estoque(livros: list[Dict]) -> str:
    disponiveis = livros_disponiveis(livros)
    mensagens = [exibir_livros(livro) for livro in disponiveis]
    return "\n".join(mensagens)


if __name__ == "__main__":
    resultado = exibir_livros_em_estoque(livros)
    print(resultado)
1 resposta

Olá, Matheus! Como vai?

Muito bem! Continue resolvendo os desafios e compartilhando com a comunidade Alura.

Observei que você explorou o uso de funções puras para organizar e separar responsabilidades do código, utilizou muito bem o list comprehension para transformar listas de forma elegante e ainda compreendeu a importância do tipo Dict com List para tornar o código mais legível e seguro.

Uma dica interessante para o futuro é usar funções lambda com filter() para filtrar elementos de uma lista de forma mais funcional. Dessa forma:

from typing import Dict, List

livros = [
    {"nome": "1984", "estoque": 5},
    {"nome": "Dom Casmurro", "estoque": 0},
    {"nome": "O Pequeno Príncipe", "estoque": 3},
    {"nome": "O Hobbit", "estoque": 0},
    {"nome": "Orgulho e Preconceito", "estoque": 2}
]

def exibir_livros(livro: Dict) -> str:
    return f'Livro disponível: {livro["nome"]}. (Estoque disponível: {livro["estoque"]})'

def livros_disponiveis(livros: List[Dict]) -> List[Dict]:
    return list(filter(lambda livro: livro["estoque"] > 0, livros))

def exibir_livros_em_estoque(livros: List[Dict]) -> str:
    disponiveis = livros_disponiveis(livros)
    mensagens = [exibir_livros(livro) for livro in disponiveis]
    return "\n".join(mensagens)

if __name__ == "__main__":
    resultado = exibir_livros_em_estoque(livros)
    print(resultado)

Resultado:

Livro disponível: 1984. (Estoque disponível: 5)
Livro disponível: O Pequeno Príncipe. (Estoque disponível: 3)
Livro disponível: Orgulho e Preconceito. (Estoque disponível: 2)

Isso reduz a quantidade de código imperativo e torna a intenção mais clara em operações de filtragem.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!