Python while
Até agora, cada linha dos seus programas rodou uma vez só, de cima para baixo. Mas boa parte do trabalho de um computador é repetir: mostrar os 30 alunos da turma, somar os preços de todas as compras, perguntar de novo até a pessoa digitar uma resposta que preste. Para repetir existem os laços (em inglês, loops). O mais simples deles é o while, que em inglês quer dizer "enquanto": enquanto a condição for verdadeira, repita.
- O que é um laço e como se escreve um
while: a condição, os dois-pontos e o bloco indentado. - Como contar de 1 até 5, e de 5 até 1, com uma variável contadora.
- Como repetir quando você não sabe quantas voltas vão ser: juntar dinheiro até chegar à meta.
- Como ler vários valores com
input()até a pessoa digitar0, e como pedir de novo até ela digitar uma nota válida. - O que é um laço infinito e como pará-lo: Ctrl+C e o
KeyboardInterrupt. - Os erros reais mais comuns: os dois-pontos, a indentação, a variável que não existe e o texto comparado com número.
Todos os programas desta aula rodaram no Python 3.14 da máquina da Ana (usuária ana, computador notebook), salvos na pasta pessoal dela e executados com python3 arquivo.py (veja Rodando um Programa). Você pode rodar cada um no editor do guia.
A ideia: "enquanto tiver pão no cesto, atenda o próximo"
A padaria do bairro abre às 6 horas com um cesto de pães. O dono deixa um bilhete para o funcionário: "Enquanto tiver pão no cesto, atenda o próximo cliente." O bilhete não diz quantos clientes vão ser atendidos. Mesmo assim, ele funciona:
- O funcionário olha o cesto: tem pão? Sim → atende um cliente.
- Olha de novo: tem pão? Sim → atende mais um.
- … e assim por diante …
- Olha de novo: tem pão? Não → para de atender e vai fazer outra coisa.
Três detalhes desse bilhete valem para todo while:
- A pergunta vem antes de cada atendimento. Se o cesto já começar vazio, ninguém é atendido.
- Cada volta muda alguma coisa (sai pão do cesto). Sem isso, a resposta da pergunta seria sempre a mesma, e o funcionário atenderia para sempre.
- Quando a resposta vira não, ele sai da repetição e continua o resto do dia.
No Python, a "pergunta" é uma condição, a mesma do if: uma expressão que dá True (verdadeiro) ou False (falso), como contador <= 5 (veja Booleanos e Comparações). A diferença é que o if roda o bloco uma vez se a condição for verdadeira; o while roda o bloco de novo e de novo, enquanto ela continuar verdadeira.
1. O primeiro while: contar de 1 a 5
contador = 1
while contador <= 5:
print(f"Volta {contador}")
contador += 1
print(f"Fim! contador agora vale {contador}")
- contador = 1
- A variável contadora, criada antes do laço, com o valor inicial. Poderia se chamar
voltaoui(de "índice", um nome tradicional para contadores); o importante é que ela exista antes de a condição ser testada. - while
- A palavra-chave do laço: "enquanto".
- contador <= 5
- A condição, testada antes de cada volta. Lê-se: "enquanto o contador for menor ou igual a 5". No Python, ela não precisa de parênteses.
- :
- Os dois-pontos fecham a linha do
while, como noif. Eles avisam: "agora vem o bloco que se repete". - print(f"Volta {contador}")
- A primeira linha do corpo do laço. Ela está 4 espaços mais para dentro: é essa indentação que diz ao Python que a linha faz parte do
while(veja Sintaxe e Indentação). A f-string põe o valor atual do contador no lugar de{contador}. - contador += 1
- Soma 1 ao contador (o atalho de
contador = contador + 1; veja Operadores de Atribuição). É esta linha que faz o laço andar: sem ela, o contador seria 1 para sempre. - print(f"Fim! …")
- Esta linha voltou para a margem esquerda: ela está fora do laço e roda uma vez só, depois que o laço termina.
$ python3 contador.py Volta 1 Volta 2 Volta 3 Volta 4 Volta 5 Fim! contador agora vale 6
Cada execução do corpo se chama uma volta (os programadores também dizem iteração). Aqui foram 5 voltas.
Passo a passo: o que o Python fez
Siga a variável contador volta por volta. Fazer de conta que você é o computador é a melhor forma de entender laços:
| Momento | Valor de contador | contador <= 5? | O que acontece |
|---|---|---|---|
| 1º teste | 1 | True | Entra: mostra Volta 1, e o contador vira 2 |
| 2º teste | 2 | True | Mostra Volta 2, o contador vira 3 |
| 3º teste | 3 | True | Mostra Volta 3, o contador vira 4 |
| 4º teste | 4 | True | Mostra Volta 4, o contador vira 5 |
| 5º teste | 5 | True | Mostra Volta 5, o contador vira 6 |
| 6º teste | 6 | False | Sai do laço e vai para a primeira linha de fora |
Por isso a última linha mostra contador agora vale 6: o laço só termina quando a condição fica falsa, e ela só fica falsa quando o contador passa de 5. A condição foi testada 6 vezes para o corpo rodar 5 vezes.
1) o início: contador = 1 · 2) a condição: contador <= 5 · 3) o passo: contador += 1. Se faltar qualquer uma, o laço dá errado (a seção Quando dá errado mostra cada caso). Na aula for, você vai ver um laço que cuida das três sozinho.
Missão: faça o programa contar até 10 em vez de 5. Depois, por curiosidade, troque o valor inicial para 3 e veja quantas voltas sobram.
contador = 1
while contador <= 5:
print(f"Volta {contador}")
contador += 1
print(f"Fim! contador agora vale {contador}")
contador = 1
while contador <= 10:
print(f"Volta {contador}")
contador += 1
print(f"Fim! contador agora vale {contador}")
2. Contar para trás
O passo não precisa ser "mais 1". Para uma contagem regressiva, comece do maior número, diminua com -= 1 e troque a condição para "maior que zero":
segundos = 5
while segundos > 0:
print(f"{segundos}...")
segundos -= 1
print("Já!")
$ python3 regressiva.py 5... 4... 3... 2... 1... Já!
Quando segundos chega a 0, a pergunta 0 > 0 dá False e o laço termina. O Já! está fora do bloco (na margem esquerda), então aparece uma vez só, no fim.
O passo também pode ser de 2 em 2 (contador += 2), de 10 em 10, ou até uma multiplicação (valor *= 2), como você vai ver na missão final.
3. Quando você não sabe quantas voltas vão ser
Nos dois exemplos acima, dava para saber de antemão: 5 voltas. O while brilha mesmo quando ninguém sabe quantas voltas serão. A Ana quer juntar R$ 1000 para comprar um notebook novo. Ela consegue guardar R$ 150 por mês. Quantos meses vai levar?
saldo = 0
meses = 0
while saldo < 1000:
saldo += 150
meses += 1
print(f"Mês {meses}: R$ {saldo}")
print(f"A Ana juntou R$ {saldo} em {meses} meses.")
$ python3 poupanca.py Mês 1: R$ 150 Mês 2: R$ 300 Mês 3: R$ 450 Mês 4: R$ 600 Mês 5: R$ 750 Mês 6: R$ 900 Mês 7: R$ 1050 A Ana juntou R$ 1050 em 7 meses.
Repare nos papéis das duas variáveis:
saldoé um acumulador: começa em 0 e, a cada volta, recebe mais um pouco. É ele que a condição olha.mesesé um contador: conta as voltas, para no fim a gente saber quantas foram.
No mês 6 o saldo era 900, ainda menor que 1000: mais uma volta. No mês 7 ele passou para 1050, a condição 1050 < 1000 deu False, e o laço parou. O programa descobriu sozinho que eram 7 meses.
Zero voltas também é possível
Como a pergunta vem antes da primeira volta, o corpo pode não rodar nenhuma vez. Se a Ana já tivesse R$ 1200:
saldo = 1200
meses = 0
while saldo < 1000:
saldo += 150
meses += 1
print(f"Meses de espera: {meses}")
$ python3 nunca.py Meses de espera: 0
Logo no primeiro teste, 1200 < 1000 deu False: o Python pulou o bloco inteiro e foi direto para o print. Isso não é erro; é o cesto que já começou vazio.
4. Repetir com input(): somar até digitar 0
No caixa da padaria, a Ana digita o preço de cada item da compra. Ela não sabe quantos itens o cliente trouxe; quando acabar, ela digita 0. Um valor especial que quer dizer "acabou" se chama sentinela (como o vigia que avisa a hora de parar).
total = 0
preco = float(input("Preço do item (0 para terminar): "))
while preco != 0:
total += preco
preco = float(input("Preço do item (0 para terminar): "))
print(f"Total da compra: R$ {total:.2f}")
- preco = float(input(…))
- A primeira leitura acontece antes do laço, para a condição ter o que testar. O
input()sempre devolve texto; ofloat()o transforma num número com casas decimais (veja input() e Conversão de Tipos). - while preco != 0:
- "Enquanto o preço for diferente de zero." O
!=é o "diferente" do Python. - total += preco
- Junta o preço no acumulador.
- preco = float(input(…))
- A próxima leitura, no fim do bloco. É ela que faz o laço andar: cada volta lê um preço novo, e a condição testa esse preço novo.
- {total:.2f}
- Mostra o total com 2 casas decimais (o jeito de escrever dinheiro). Os detalhes estão em f-strings.
No terminal, a Ana digitou 4.50, 12.90, 3.25 e, por fim, 0:
$ python3 compras.py Preço do item (0 para terminar): 4.50 Preço do item (0 para terminar): 12.90 Preço do item (0 para terminar): 3.25 Preço do item (0 para terminar): 0 Total da compra: R$ 20.65
Repare que a pergunta aparece no código duas vezes: uma antes do laço e uma no fim do bloco. É o jeito clássico de escrever esse tipo de laço com while. Na seção Formas diferentes você vê como escrever a pergunta uma vez só.
Experimente: rode o programa e digite os preços de uma compra sua no terminal da caixa (use ponto nas casas decimais: 4.50). Para terminar, digite 0. O que acontece se o primeiro preço já for 0?
total = 0
preco = float(input("Preço do item (0 para terminar): "))
while preco != 0:
total += preco
preco = float(input("Preço do item (0 para terminar): "))
print(f"Total da compra: R$ {total:.2f}")
5. Pedir de novo até a resposta ser válida
A professora da Ana lança as notas da turma num programa. Nota vai de 0 a 10; se ela digitar 15 sem querer, o programa deve reclamar e perguntar de novo, quantas vezes for preciso. Isso é validar a entrada, e é um dos usos mais comuns do while:
nota = int(input("Digite a nota (0 a 10): "))
while nota < 0 or nota > 10:
print("Nota inválida! Tem de ser de 0 a 10.")
nota = int(input("Digite a nota (0 a 10): "))
print(f"Nota aceita: {nota}")
A condição nota < 0 or nota > 10 quer dizer "a nota é inválida" (menor que 0 ou maior que 10; veja and, or e not). Enquanto ela for inválida, o programa reclama e lê de novo. Uma tentativa no terminal, digitando 15, depois -2, depois 8:
$ python3 nota.py Digite a nota (0 a 10): 15 Nota inválida! Tem de ser de 0 a 10. Digite a nota (0 a 10): -2 Nota inválida! Tem de ser de 0 a 10. Digite a nota (0 a 10): 8 Nota aceita: 8
E se ela digitar 8 logo de cara? A condição dá False no primeiro teste, o bloco não roda nenhuma vez, e o programa aceita a nota direto. Ninguém leva bronca à toa.
if?
Um if no lugar do while perguntaria de novo uma vez só. Se a pessoa errasse duas vezes seguidas, a segunda nota errada passaria. O while não desiste: só sai quando a resposta presta. A missão abaixo mostra a diferença.
Missão: este programa usa if e, por isso, aceita a segunda nota errada. A caixa já vai "digitar" 15, -3 e 8. Rode uma vez para ver o problema (Nota aceita: -3) e troque o if por um while, para o programa só aceitar o 8.
nota = int(input("Digite a nota (0 a 10): "))
if nota < 0 or nota > 10:
print("Nota inválida! Tem de ser de 0 a 10.")
nota = int(input("Digite a nota (0 a 10): "))
print(f"Nota aceita: {nota}")
nota = int(input("Digite a nota (0 a 10): "))
while nota < 0 or nota > 10:
print("Nota inválida! Tem de ser de 0 a 10.")
nota = int(input("Digite a nota (0 a 10): "))
print(f"Nota aceita: {nota}")
Esse programa ainda tem um ponto fraco: se a professora digitar oito, por extenso, o int() não consegue converter e o programa para com um ValueError (você vai ver a mensagem em Quando dá errado). Tratar esse caso também é possível, mas pede uma ferramenta nova, o try, que tem aula própria: try e except.
6. O laço infinito, e como pará-lo
Um laço cuja condição nunca fica falsa não termina nunca: é um laço infinito. O jeito mais comum de criar um sem querer é esquecer a linha que faz o laço andar. Olhe o contador da seção 1 sem o contador += 1:
contador = 1
while contador <= 5:
print(f"Volta {contador}")
print("Fim!")
O contador fica em 1 para sempre, então 1 <= 5 é sempre True, e o programa mostra Volta 1 sem parar. No lab, foram centenas de milhares de linhas por segundo. O Fim! nunca chega.
No terminal: Ctrl+C
Para interromper um programa que não termina, segure Ctrl e aperte C. O terminal mostra ^C (é assim que ele escreve o Ctrl+C) e o Python para, com esta mensagem:
$ python3 infinito.py
Volta 1
Volta 1
Volta 1 « …centenas de milhares de linhas iguais…
Volta 1
^CVolta 1 « o ^C é o Ctrl+C; o Volta 1 já estava a caminho da tela
Traceback (most recent call last):
File "/home/ana/infinito.py", line 3, in <module>
print(f"Volta {contador}")
~~~~~^^^^^^^^^^^^^^^^^^^^^
KeyboardInterrupt
$ echo $?
130
Linha por linha:
- ^C
- O terminal mostrando que você apertou Ctrl+C.
- Traceback (most recent call last):
- "Rastro (a chamada mais recente por último)": o Python vai contar onde o programa estava quando parou.
- File "/home/ana/infinito.py", line 3, in <module>
- Ele estava no arquivo
infinito.py, na linha 3, no programa principal (<module>). Faz sentido: é a única linha que o laço repetia. - print(f"Volta {contador}") e ~~~~~^^^^^
- A linha em si, com o trecho que estava rodando marcado embaixo.
- KeyboardInterrupt
- "Interrupção pelo teclado". Não é um defeito do seu código: é o Python avisando que você mandou parar.
- echo $? → 130
- O código de saída do programa (o
$?do terminal). 0 quer dizer "terminou bem"; 130 é o código de quem foi interrompido com Ctrl+C.
Se a tela encher tão rápido que o Ctrl+C parece não fazer efeito, espere um instante: o terminal ainda está mostrando as linhas que já tinham sido impressas.
No editor do guia
A caixa "Experimente" roda o Python de verdade dentro do navegador, então um laço infinito lá também não termina sozinho. A diferença é que o editor tem as suas próprias travas:
- enquanto o programa roda, o botão ▶ Rodar vira ■ Parar. Clicar nele é o Ctrl+C do editor: a caixa mostra
^Ce[programa interrompido], sem o traceback doKeyboardInterrupt; - se o programa passar de 10 segundos rodando sem terminar, o editor o para sozinho e avisa que pode ser um laço infinito (o tempo em que o programa espera você digitar não conta);
- se o programa escrever demais (como o
Volta 1sem fim), o editor também o para antes disso.
Mais detalhes na aula O Editor do Guia.
Quando o infinito é de propósito: while True
Às vezes o laço infinito é proposital: um programa que fica esperando pedidos até alguém mandar parar. Para isso se escreve while True:, uma condição que é sempre verdadeira. Um laço assim precisa de uma saída no meio do bloco, que é o break (em inglês, "quebrar"). Ele aparece logo abaixo, em Formas diferentes, e tem aula própria: break e continue.
7. while no modo interativo
Dá para escrever um laço direto no >>> do Python (veja O Modo Interativo). Depois da linha com os dois-pontos, o prompt muda para ...: o Python está esperando o corpo do laço. No Python 3.14, os 4 espaços de indentação aparecem sozinhos; você digita só o print(n). Para dizer que o bloco acabou, aperte Enter numa linha vazia:
$ python3 Python 3.14.4 (main, Aug 20 2026, 10:41:58) [GCC 15.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> n = 3 >>> while n > 0: ... print(n) ... n -= 1 ... 3 2 1 >>> n 0 >>> exit()
O laço só rodou depois da linha vazia, de uma vez. E a variável continua lá depois do laço: n terminou valendo 0, o valor que fez a condição n > 0 ficar falsa.
>>>
Como o Python 3.14 já coloca a indentação sozinho, se você digitar mais 4 espaços, a linha fica com 8 e o Python reclama (IndentationError: unexpected indent). No arquivo .py é diferente: lá, quem põe os espaços é você (ou o seu editor de texto).
Formas diferentes de fazer a mesma coisa
A validação da nota (seção 5) pode ser escrita de duas formas. A primeira é a que você já viu: lê antes do laço e lê de novo no fim do bloco.
nota = int(input("Digite a nota (0 a 10): "))
while nota < 0 or nota > 10:
print("Nota inválida! Tem de ser de 0 a 10.")
nota = int(input("Digite a nota (0 a 10): "))
print(f"Nota aceita: {nota}")
A segunda usa while True e sai do laço com break quando a nota é boa. A pergunta aparece uma vez só:
while True:
nota = int(input("Digite a nota (0 a 10): "))
if 0 <= nota <= 10:
break
print("Nota inválida! Tem de ser de 0 a 10.")
print(f"Nota aceita: {nota}")
$ python3 nota_true.py Digite a nota (0 a 10): 11 Nota inválida! Tem de ser de 0 a 10. Digite a nota (0 a 10): 7 Nota aceita: 7
O 0 <= nota <= 10 é uma comparação encadeada: "0 menor ou igual à nota, e a nota menor ou igual a 10", ou seja, a nota é válida. Quando é, o break pula para fora do laço, direto para o print final.
E contar de 1 a 5 também tem outra forma, mais curta, com o for e o range(), que são as próximas aulas. Fica só de aperitivo:
for contador in range(1, 6):
print(f"Volta {contador}")
| Situação | Qual usar |
|---|---|
| Não se sabe quantas voltas vão ser (até a meta, até digitar 0, até a resposta ser válida) | while condição: |
| Ler, testar e talvez repetir, com a pergunta escrita uma vez só | while True: com break (aula break e continue) |
| Contar um número conhecido de voltas, ou passar por cada letra de um texto ou cada item de uma lista | for (aulas for e range()) |
Quando dá errado
contador = 1
while contador <= 5
print(f"Volta {contador}")
contador += 1
$ python3 dois_pontos.py
File "/home/ana/dois_pontos.py", line 2
while contador <= 5
^
SyntaxError: expected ':'
"Erro de sintaxe: era esperado :". O Python mostra a linha 2 e põe o ^ logo depois do 5, onde os dois-pontos deveriam estar. Repare que não apareceu nenhum Volta: com erro de sintaxe, o programa nem começa a rodar. Como consertar: while contador <= 5:.
contador = 1
while contador <= 5:
print(f"Volta {contador}")
contador += 1
$ python3 indentacao.py
File "/home/ana/indentacao.py", line 3
print(f"Volta {contador}")
^^^^^
IndentationError: expected an indented block after 'while' statement on line 2
"Erro de indentação: era esperado um bloco indentado depois do comando while da linha 2". Depois dos dois-pontos, o Python exige pelo menos uma linha mais para dentro. Como consertar: ponha 4 espaços antes de cada linha que deve se repetir.
Este é mais traiçoeiro, porque o Python não reclama de nada:
contador = 1
while contador <= 5:
print(f"Volta {contador}")
contador += 1
O contador += 1 está na margem esquerda, então ele está fora do laço: só rodaria depois que o laço terminasse, e o laço nunca termina. O resultado é o mesmo da seção 6: Volta 1 sem parar, até o Ctrl+C. Como consertar: indente o contador += 1 com os mesmos 4 espaços do print. Em Python, a indentação não é enfeite: ela decide o que está dentro e o que está fora.
while contador <= 5:
print(f"Volta {contador}")
contador += 1
$ python3 sem_inicio.py
Traceback (most recent call last):
File "/home/ana/sem_inicio.py", line 1, in <module>
while contador <= 5:
^^^^^^^^
NameError: name 'contador' is not defined
"Erro de nome: o nome contador não está definido". Para testar a condição pela primeira vez, o Python precisa saber quanto vale o contador, e ninguém criou essa variável. Os ^^^^^^^^ marcam exatamente o nome que ele não conhece. Como consertar: crie a variável antes do while: contador = 1.
input() com um número
nota = input("Digite a nota (0 a 10): ")
while nota < 0 or nota > 10:
print("Nota inválida! Tem de ser de 0 a 10.")
nota = input("Digite a nota (0 a 10): ")
print(f"Nota aceita: {nota}")
$ python3 tipo.py
Digite a nota (0 a 10): 8
Traceback (most recent call last):
File "/home/ana/tipo.py", line 2, in <module>
while nota < 0 or nota > 10:
^^^^^^^^
TypeError: '<' not supported between instances of 'str' and 'int'
"Erro de tipo: o < não funciona entre um str (texto) e um int (número inteiro)". O input() devolveu o texto '8', e o Python não compara texto com número. O ^^^^^^^^ aponta a comparação nota < 0. Como consertar: converta na hora de ler, nas duas leituras: nota = int(input(…)).
$ python3 nota.py
Digite a nota (0 a 10): oito
Traceback (most recent call last):
File "/home/ana/nota.py", line 1, in <module>
nota = int(input("Digite a nota (0 a 10): "))
ValueError: invalid literal for int() with base 10: 'oito'
"Erro de valor: texto inválido para o int() na base 10: 'oito'". O laço sabe pedir de novo quando a nota está fora da faixa, mas o erro aqui aconteceu antes, na conversão. O programa está certo; foi a entrada que não era um número. Como fazer o programa sobreviver a isso é assunto da aula try e except.
Missão: este programa para com um TypeError. A caixa vai "digitar" 12 e depois 7. Conserte as leituras para o programa recusar o 12 e aceitar o 7.
nota = input("Digite a nota (0 a 10): ")
while nota < 0 or nota > 10:
print("Nota inválida! Tem de ser de 0 a 10.")
nota = input("Digite a nota (0 a 10): ")
print(f"Nota aceita: {nota}")
nota = int(input("Digite a nota (0 a 10): "))
while nota < 0 or nota > 10:
print("Nota inválida! Tem de ser de 0 a 10.")
nota = int(input("Digite a nota (0 a 10): "))
print(f"Nota aceita: {nota}")
Referência rápida
| Escrita | O que faz |
|---|---|
while condição: | Repete o bloco indentado enquanto a condição for True; testa antes de cada volta |
contador = 1 … contador += 1 | Início e passo de um laço com contador |
contador -= 1 | Passo para contar para trás |
total += valor | Acumular: juntar um valor a cada volta |
while preco != 0: | Repetir até ler o valor sentinela |
while nota < 0 or nota > 10: | Pedir de novo enquanto a resposta for inválida |
while True: … break | Laço "infinito" de propósito, com saída no meio |
| Ctrl+C | No terminal, interrompe o programa (KeyboardInterrupt, código de saída 130) |
| Sintoma | Causa provável |
|---|---|
SyntaxError: expected ':' | Faltaram os dois-pontos no fim da linha do while |
IndentationError: expected an indented block after 'while' statement | O corpo do laço não está indentado |
| A mesma linha sem parar | Laço infinito: faltou o passo, ou ele ficou fora do bloco (sem indentação) |
NameError: name '…' is not defined | A variável da condição não foi criada antes do while |
TypeError: '<' not supported between instances of 'str' and 'int' | Comparou o texto do input() com um número: faltou o int() |
KeyboardInterrupt | Você apertou Ctrl+C: não é defeito no código |
Exercícios
1. Complete o laço
Complete para o programa mostrar os números de 1 a 3:
n <= 3
print(n)
n 1
2. Quantas vezes?
Quantas vezes este laço mostra Oi? Responda com um número.
x = 10
while x > 4:
print("Oi")
x -= 2
3. Qual é o valor de contador depois deste trecho? contador = 1 / while contador <= 5: / contador += 1
4. Um programa mostra a mesma linha sem parar. O que você aperta no terminal para pará-lo?
5. saldo = 2000 / while saldo < 1000: / saldo += 150. Quantas voltas esse laço dá?
6. Para pedir a nota de novo até a pessoa digitar um valor de 0 a 10, qual linha serve?
Missão final: o dinheiro que dobra
Missão: a Ana leu uma história: alguém começa com R$ 1 e, a cada dia, o dinheiro dobra. Em quantos dias passa de R$ 1000? Escreva o while no lugar do comentário: enquanto o valor for menor ou igual a 1000, dobre o valor (valor *= 2) e some 1 em dias.
valor = 1
dias = 0
# escreva o while aqui
print(f"Passou de R$ 1000 em {dias} dias: R$ {valor}")
valor = 1
dias = 0
while valor <= 1000:
valor *= 2
dias += 1
print(f"Passou de R$ 1000 em {dias} dias: R$ {valor}")
A resposta é 10 dias, com R$ 1024. No lab, saiu Passou de R$ 1000 em 10 dias: R$ 1024. Experimente trocar 1000 por um milhão (1000000): bastam mais 10 dias (no lab, deu 20 dias: R$ 1048576). É a força de dobrar.
Resumo
while condição:("enquanto") repete o bloco indentado enquanto a condição forTrue. A condição é testada antes de cada volta; se for falsa logo de cara, o bloco não roda nenhuma vez.- Laço com contador tem três peças: início (antes do laço), condição e passo (dentro do bloco).
- O
whileé a escolha quando não se sabe quantas voltas vão ser: até a meta, até o valor sentinela, até a resposta ser válida. - Com
input(), leia uma vez antes do laço e de novo no fim do bloco, e converta comint()oufloat(). - Sem o passo (ou com o passo fora da indentação), o laço é infinito. No terminal, Ctrl+C para o programa com um
KeyboardInterrupt. while True:é um laço infinito de propósito; ele precisa de umbreakpara sair (aula break e continue).