Repetir enquanto uma condição for verdadeira
Um laço while verifica uma condição antes de cada volta e executa o bloco enquanto a condição for True. Use-o quando você não sabe de antemão quantas voltas serão necessárias: dividir uma ordem ao meio até ficar pequena o bastante, esperar um preço cruzar um nível, fazer um saldo crescer até uma meta. Algo dentro do bloco precisa mudar a condição, senão o laço nunca termina.
# Halve an order until it is small enough to trade at once
quantity, limit = 1000, 100
steps = 0
while quantity > limit:
quantity = quantity / 2
steps += 1
print(steps, quantity) # 4 62.5for ou while?
Use for quando já tiver os itens ou souber a quantidade: ele não pode rodar para sempre. Use while quando o ponto de parada depender do que acontece durante o laço. Um bom teste: se você consegue dizer «para cada um destes», escreva for; se diz «até que isto seja verdadeiro», escreva while.
while, verifique três coisas: a condição usa uma variável que o laço altera, a alteração acontece em toda volta e aproxima a condição de False. Se um laço demorar demais aqui, ele é interrompido após 10 segundos.break: sair do laço agora
break encerra o laço na hora e continua com a linha seguinte. É o jeito de parar assim que você tem a resposta, como o primeiro preço que rompe um limite. Aqui o laço percorre posições com um índice que ele mesmo incrementa.
# break leaves the loop at once
prices = [184.25, 184.5, 186.0, 185.0]
limit = 185.5
index = 0
while index < len(prices):
if prices[index] > limit:
print("breach at", index) # breach at 2
break
index += 1continue: pular para a próxima volta
continue pula o resto da volta atual e volta à condição. É útil para ignorar dados ruins sem aninhar o trabalho real dentro de um if. Em um laço while, altere a variável do laço antes de continue; senão o laço encontra o mesmo item para sempre.
# continue skips the rest of the pass; step first, or it never moves on
fills = [100, -5, 250, 0, 75]
total = 0
index = 0
while index < len(fills):
value = fills[index]
index += 1
if value <= 0:
continue
total += value
print(total) # 425Laços que buscam ou convergem
Muitas tarefas de quant são do tipo «continue até que»: capitalizar até uma meta, refinar uma estimativa até que pare de mudar, tentar de novo até uma requisição ter sucesso. while True: com um break no meio é uma forma comum quando o teste de saída fica no meio do trabalho.
# How many years until 10,000 grows to 15,000 at 7% a year?
balance, target, rate = 10_000, 15_000, 0.07
years = 0
while balance < target:
balance = balance * (1 + rate)
years += 1
print(years) # 6
# while True + break: the exit test sits in the middle
attempt = 0
while True:
attempt += 1
if attempt * 25 >= 100:
break
print(attempt) # 4- A condição usa uma variável que o laço altera.
- A alteração acontece em toda volta, mesmo antes de um
continue. - Use
breakassim que a resposta for conhecida.
A seguir: definir e chamar funções, para dar um nome a um bloco de código e reutilizá-lo.
Lab: o que é avaliado
- Contar as divisões ao meio de uma ordem com
halving_steps25 pts - Encontrar o primeiro preço acima de um limite com
first_breach25 pts - Somar as execuções válidas até o marcador final com
sum_until_zero25 pts - Capitalizar um saldo até uma meta com
years_to_target25 pts