1. Refaça o código abaixo de modo que o while não use o break.
    while True:
    line = input('> ')
    if line == 'done':
        break
    print(line)
print('Done!')

Passo 1

O enunciado pede para reescrever um pequeno programa Python que lê linhas do teclado e termina quando o usuário digita a palavra 'done', mas a nova versão não pode usar o comando break. As informações dadas no código original são:
  • O programa lê repetidamente usando input('> ').
  • Se a linha lida for 'done', o programa termina.
  • Para qualquer outra linha, o programa imprime a linha lida.
  • Ao final (quando termina), o programa imprime 'Done!'.

Passo 2

Entendendo o que break faz aqui e qual alternativa queremos:
  • No código original, while True: cria um laço infinito e break é usado para sair quando a condição de parada (line == 'done') acontece.
  • Uma alternativa clássica ao uso de break é transformar a condição de parada em parte da condição do while. Ou seja, fazer o while verificar se ainda devo continuar (por exemplo, while line != 'done':).
  • Para isso funcionar, preciso ter o valor inicial de line antes do while. Esse padrão chama-se “priming read” (leitura inicial) — leio uma vez antes do laço, e depois dentro do laço leio novamente no final para atualizar a condição.

Passo 3

Explicando passo a passo a versão com “priming read”:
  1. Faço uma primeira leitura com line = input('> '). Assim tenho uma primeira linha para avaliar.
  2. Entro no while cuja condição é line != 'done'. Enquanto a linha lida for diferente de 'done', o laço continua.
  3. Dentro do while, imprimo a line (porque está autorizada a ser exibida).
  4. Também dentro do while, faço outra leitura line = input('> ') para atualizar a variável e decidir se o laço continua ou para na próxima verificação.
  5. Quando o usuário digitar 'done', a condição line != 'done' falha e o while encerra naturalmente sem usar break.
  6. Fora do laço, imprimo print('Done!') para indicar que terminou.
Detalhes práticos:
  • input() sempre retorna uma string; por isso dá para comparar direto com 'done'.
  • É importante atualizar line dentro do while para evitar um laço infinito.
  • Esse é o jeito mais simples e direto para evitar break.

Passo 4

Vou mostrar o código final desta solução (usei a técnica de priming read explicada acima). Esse código tem comportamento idêntico ao original, mas não usa break.

Passo 5

Como bônus (opcional), existe outra solução sem break usando uma variável booleana de controle:
  • Inicializo finished = False.
  • Uso while not finished:, leio line = input('> ').
  • Se line == 'done' então finished = True, senão print(line).
  • Fora do laço, print('Done!').
    Essa técnica também evita break e pode ser útil quando a condição de parada é mais complexa.

Resposta

line = input('> ')
while line != 'done':
    print(line)
    line = input('> ')
print('Done!')

Exercícios relacionados