Curso de Python / Controlar a repetição com while, break e continue
Um laço while repete enquanto sua condição é verdadeira. break encerra o laço mais interno, e continue pula o restante da rodada atual; confira se cada caminho permite atualizar o estado necessário para o término.
Escolha uma repetição baseada em condição
Quando os itens já estão disponíveis, um for costuma expressar diretamente o percurso. Quando o programa precisa receber novas entradas ou repetir até que um estado mude, while pode ser adequado. A condição é testada antes de cada rodada; se for falsa desde o início, o bloco não será executado.
while True mantém a condição verdadeira e deixa o término depender de uma saída interna explícita, como break. Isso não é um erro por si só. O importante é que a regra de saída seja clara e alcançável. A referência da instrução while descreve o teste e o retorno provocado por continue.
Se a atualização de um contador ou de uma entrada ficar somente depois de continue, alguns caminhos podem sempre ignorá-la. Em um terminal, use Ctrl+C para interromper um laço que não termina e depois examine onde o estado é atualizado. Um cursor aguardando uma entrada, porém, pode significar apenas que input() está esperando você digitar.
Leia valores até receber o comando de saída
Salve o programa completo em UTF-8 como while_input.py e execute python while_input.py no terminal do ambiente selecionado. No macOS ou Ubuntu, fora de um ambiente virtual, use python3 se esse for o comando da instalação. Nenhum pacote ou arquivo externo é necessário.
total = 0
while True:
text = input("amount or q: ").strip()
if text == "q":
break
if text == "":
continue
amount = int(text)
if amount < 0:
print("skip negative")
continue
total += amount
print("total:", total)
No prompt amount or q:, que pede um valor ou o comando q, informe esta sequência, pressionando Enter a cada etapa:
3500- Uma linha vazia, apenas pressionando Enter
-1q
A saída escrita pelo programa, sem incluir os caracteres digitados, é:
amount or q: amount or q: amount or q: skip negative
amount or q: total: 3500
Um terminal interativo normalmente mostra também o que você digita. Por isso, a disposição das linhas pode parecer diferente da saída sem eco acima. A mensagem skip negative significa que o valor negativo foi ignorado, e a última linha confirma o total 3500.
Acompanhe o caminho de cada entrada
A cada rodada, input() recebe uma nova linha, e strip() remove os espaços nas extremidades. A comparação com "q" vem antes da conversão: quando o comando aparece, break sai do laço e a impressão final é executada.
Uma string vazia provoca continue, mas a próxima rodada volta à chamada de entrada. O programa não fica preso à mesma string vazia. Um valor negativo já convertido provoca a mensagem e outro continue, sem chegar a total += amount. Um inteiro não negativo é acrescentado ao total.
Esta versão pressupõe uma string que represente um inteiro ou o comando minúsculo q. abc e 8000.5 provocam ValueError, e o programa termina porque não há tratamento dessa conversão. Uma fonte de entrada que termine antes da próxima linha pode provocar EOFError. A referência de input() explica a leitura e o fim da entrada.
Se o programa precisar pedir novamente um valor inválido, trate especificamente a conversão com int() e a exceção esperada ValueError, mantendo a verificação de saída antes dela. Não transforme todo erro da aplicação em uma nova tentativa. A aula de entrada e conversão de texto ajuda a distinguir o que foi lido do valor numérico resultante.
Confira o alcance da saída e os casos de limite
Em laços aninhados, break encerra apenas o mais interno. Para sair de várias camadas, será necessário planejar um estado que os níveis externos verifiquem ou uma função que possa retornar. continue também atua somente no laço a que pertence. O tutorial de break e continue mostra esse alcance.
- Execute novamente e informe
qcomo primeira entrada. O total deve ser0. - Teste
10,20eq. Confira o total30. - Teste
0e depoisq. O zero é uma string não vazia convertida em um inteiro válido; ele é processado, embora não aumente o total. - Execute com
Qmaiúsculo. O comando atual não o reconhece e a conversão provocaValueError. Se a regra permitir as duas formas, normalize explicitamente o comando antes de compará-lo. - Volte à sequência original de quatro entradas e confirme o total
3500.
A repetição precisa manter uma forma evidente de terminar. Verifique tanto a condição quanto os caminhos que pulam etapas; não presuma que uma operação de atualização será executada só porque ela está escrita dentro do laço.




