def buscar_livro(nome_livro: str, lista_livros: list[str]) -> bool:
"""
Procura um livro em uma lista, eliminando a sensibilidade a maiúsculas/minúsculas,
removendo espaços laterais do nome buscado e validando listas vazias.
Args:
nome_livro: str - O nome do livro a ser procurado.
lista_livros: list[str] - Uma lista de strings contendo os nomes dos livros.
Returns:
True se o livro for encontrado na lista, False caso contrário.
"""
if not nome_livro:
return False
if not lista_livros:
return False
nome_livro = nome_livro.strip().lower()
for livro in lista_livros:
if livro.strip().lower() == nome_livro:
return True
return False
def main() -> None:
separador: str = '\n-----------------------------------\n'
nome_livro: str = 'O Hobbit'
nome_livro_normalizado: str = nome_livro.strip().lower()
livros: list[str] = ["1984", "Dom Casmurro", "O Pequeno Príncipe", "O Hobbit", "Orgulho e Preconceito"]
# Nessa primeira abordagem utilizamos o "break" para interromper o laço "for" quando o livro for encontrado na lista.
# Uma feature do laço "for", no python, é possuir "else", o que não é comum em outras linguagens. Basicamente o bloco
# "else" do laço "for" é executado caso o laço "for" termine de forma natural, sem que o break o interrompa.
for livro in livros:
if livro.strip().lower() == nome_livro_normalizado:
print(f'Livro encontrado: {nome_livro}')
break
else:
print(f'Livro NÂO encontrado!')
print(separador)
# Nessa segunda abordagem utilizamos a função "buscar_livro()" para retornar "True" caso encontre o livro na lista ou
# "False" caso não encontre. Para isso a função usa a palavra reservada "return", que funciona de forma parecida com o
# "break". Enquanto o "break" simplesmente para o laço de repetição, o "return" para toda a execução da função e retorna
# o valor que você especificar a frente dele.
if buscar_livro(nome_livro, livros):
print(f'Livro encontrado: {nome_livro}')
else:
print(f'Livro NÂO encontrado!')
if __name__ == '__main__':
main()