Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Entendendo o uso do break

O programa com if, elif e else funciona certinho, mas o programa com o uso do for não funciona direito.. Por que ?

livros = ["1984", "Dom Casmurro", "O Pequeno Príncipe", "O Hobbit", "Orgulho e Preconceito"]

livro = input('Digite o nome do livro que deseja:\n ')


if livro == '1984':
    print(f"Livro encontrado:{livro}")
    
elif livro == 'Dom Casmurro':
    print(f"Livro encontrado:{livro}")
    
elif livro == 'O Pequeno Príncipe':
    print(f"Livro encontrado:{livro}")
        
elif livro == 'O Hobbit':
    print(f"Livro encontrado:{livro}")
        
elif livro == 'Orgulho e Preconceito':
    print(f"Livro encontrado:{livro}")
        
else:
     print("Livro não encontrado")

"""livros = ["1984", "Dom Casmurro", "O Pequeno Príncipe", "O Hobbit", "Orgulho e Preconceito"]

livro = input('Digite o nome do livro que deseja:\n ') 

for livro in livros:
    if livro == 'O Hobbit':
        print(f"Livro encontrado: {livro}")
        break
    elif livro == 'Dom Casmurro':
        print(f"Livro encontrado: {livro}")
        break
    elif livro == 'O Pequeno Príncipe':
        print(f"Livro encontrado: {livro}")
        break
    elif livro == 'Orgulho e Preconceito':
        print(f"Livro encontrado: {livro}")
        break
    else:
        print("Livro não encontrado")
        break"""
1 resposta
solução!

Olá, Willian!

No seu programa com if, elif e else, a verificação é feita apenas uma vez com o valor da variável livro que você digitou. Se alguma das condições for verdadeira, a mensagem correspondente é impressa e o programa segue em frente (ou termina, nesse caso).

Agora, no programa com o for, a coisa muda um pouquinho. O loop for livro in livros: vai percorrer cada um dos livros presentes na sua lista livros, um por vez.

A questão principal aqui é o uso do break dentro do loop. O break tem uma função bem específica: ele interrompe a execução do loop imediatamente no momento em que é encontrado.

Vamos analisar o que acontece passo a passo no seu código com o for:

  1. Primeira iteração: A variável livro assume o valor "1984".
    • A condição if livro == 'O Hobbit' é falsa.
    • A condição elif livro == 'Dom Casmurro' é falsa.
    • A condição elif livro == 'O Pequeno Príncipe' é falsa.
    • A condição elif livro == 'Orgulho e Preconceito' é falsa.
    • Então, o bloco do else é executado: print("Livro não encontrado") e, logo em seguida, o break é acionado, fazendo com que o loop termine ali mesmo, sem verificar os outros livros da lista.

Por isso, mesmo que o livro que você digitou esteja na lista, se ele não for o primeiro ("1984"), o programa vai imprimir "Livro não encontrado" e sair do loop.

Como você poderia corrigir para que funcione como esperado?

A ideia é verificar todos os livros da lista antes de dizer que o livro não foi encontrado. Você pode fazer isso da seguinte forma:

livros = ["1984", "Dom Casmurro", "O Pequeno Príncipe", "O Hobbit", "Orgulho e Preconceito"]

livro_desejado = input('Digite o nome do livro que deseja:\n ')
encontrado = False  # Criamos uma variável para controlar se o livro foi encontrado

for livro in livros:
    if livro == livro_desejado:
        print(f"Livro encontrado: {livro}")
        encontrado = True
        break  # Se encontramos o livro, podemos sair do loop

if not encontrado:
    print("Livro não encontrado")

Nessa nova versão:

  1. Nós armazenamos o nome do livro digitado em uma variável chamada livro_desejado para não confundir com a variável livro do loop.
  2. Criamos uma variável booleana chamada encontrado com o valor inicial False.
  3. Dentro do loop, quando encontramos o livro desejado, imprimimos a mensagem e mudamos o valor de encontrado para True. O break aqui serve para sair do loop assim que o livro é achado, economizando iterações desnecessárias.
  4. Após o loop terminar, verificamos o valor da variável encontrado. Se ela ainda for False, significa que o livro não foi encontrado na lista, e então imprimimos a mensagem correspondente.

Espero ter ajudado e bons estudos!