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

[Projeto] Uso do Break - (usei o IS, está errado?)

Vi que na resposta do professor foi usado o "==", qual seria o impacto disso?

print('Usando o Break\n')

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

for livro in livros:
    if livro is "O Hobbit":
        print(f'Livro encontrado: {livro}')
        break
         
1 resposta
solução!

Olá Pedro.
O uso de is no seu código está conceitualmente errado, embora em alguns casos pareça funcionar.
O operador is compara identidade, ou seja, verifica se duas variáveis apontam para o mesmo objeto na memória.
Já o operador == compara igualdade de valor, verificando apenas se o conteúdo é igual.
Quando você escreve:

if livro is "O Hobbit":

pode ocorrer de funcionar porque o Python faz interning de algumas strings literais, armazenando-as de forma otimizada.
Nesse caso, a mesma string pode acabar sendo reutilizada internamente.
Porém, isso não é garantido e pode falhar em diferentes situações, como strings longas, criadas dinamicamente ou recebidas como entrada do usuário.
Por isso, a forma correta e segura é:

if livro == "O Hobbit":

Isso garante que você está comparando os valores, que é o comportamento desejado.
Código corrigido:

print('Usando o Break\n')

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

for livro in livros:
    if livro == "O Hobbit":
        print(f'Livro encontrado: {livro}')
        break

Para ilustrar a diferença entre is e ==, veja este exemplo:

a = "O Hobbit"
b = "".join(["O ", "Hobbit"])

print(a == b)   # True  (mesmo conteúdo)
print(a is b)   # False (objetos diferentes)

O operador is só deve ser usado quando se deseja verificar identidade, como em comparações com None:

if x is None:
    ...

Para comparar valores, como no caso de strings, deve-se usar ==.
Continue explorando as muitas possibilidades e testando os resultados.
E na duvida pergunte sempre.
Bons estudos.