Repetir um bloco para cada item
Um laço for executa seu bloco recuado uma vez para cada item de uma coleção e dá um nome ao item naquela volta. Aqui a coleção é uma lista, escrita com colchetes e vírgulas (as listas terão seu próprio tópico mais adiante). A sintaxe lembra a do if: dois-pontos no fim da primeira linha e um bloco recuado embaixo.
prices = [184.25, 184.5, 184.0]
for price in prices:
print(price) # 184.25, then 184.5, then 184.0range: contar sem lista
range(n) produz os inteiros de 0 até n - 1: o valor de parada não é incluído, por isso range(5) tem cinco números. range(start, stop) começa onde você disser, e range(start, stop, step) avança de step em step, que pode ser negativo para contar para trás. Use-o quando precisar repetir algo um número de vezes ou percorrer posições.
# range counts, and stops before the stop value
print(list(range(5))) # [0, 1, 2, 3, 4]
print(list(range(2, 10, 3))) # [2, 5, 8]
print(list(range(3, 0, -1))) # [3, 2, 1]O padrão do acumulador
A maioria dos laços segue um padrão: iniciar uma variável antes do laço, atualizá-la dentro dele e usá-la depois. total += price * quantity é abreviação de total = total + price * quantity. Aqui cada item da lista é um par, e a linha do laço dá nome às duas metades de uma vez (os próximos tópicos explicam esse desempacotamento direito).
# Accumulate a total over the trades
trades = [(184.25, 200), (185.0, 100), (183.5, 50)]
total = 0.0
for price, quantity in trades:
total += price * quantity
print(total) # 64525.0Percorrer posições
Às vezes é preciso comparar cada item com o anterior. Percorra as posições com range(1, len(prices)): ela começa em 1, então prices[i - 1] é sempre válido. len() dá o número de itens e prices[i] pega o item na posição i, contando a partir de 0.
# Compare each price with the one before it
prices = [184.0, 184.5, 184.25, 185.0]
ups = 0
for i in range(1, len(prices)):
if prices[i] > prices[i - 1]:
ups += 1
print(ups) # 2Construir uma lista durante o laço
Para coletar um resultado por volta, comece com uma lista vazia [] e chame .append(value) dentro do laço. Escadas de preços, totais acumulados e sinais por dia são construídos assim. A lista é devolvida (ou usada) depois que o laço termina.
# Build a list of prices, one per tick level
start, tick = 184.0, 0.25
ladder = []
for level in range(4):
ladder.append(start + level * tick)
print(ladder) # [184.0, 184.25, 184.5, 184.75]A seguir: laços while, break e continue, para repetir até que uma condição mude em vez de um número fixo de itens.
Lab: o que é avaliado
- Somar o valor de várias operações com
total_notional25 pts - Montar níveis de preço com
price_ladder25 pts - Contar os dias em que o preço subiu com
count_up_days25 pts - Manter um total acumulado com
running_total25 pts