Répéter un bloc pour chaque élément
Une boucle for exécute son bloc indenté une fois pour chaque élément d'une collection, en donnant un nom à l'élément pour ce tour. Ici, la collection est une liste, écrite avec des crochets et des virgules (les listes auront leur propre sujet plus tard). La syntaxe ressemble à celle de if : deux-points à la fin de la première ligne et un bloc indenté dessous.
prices = [184.25, 184.5, 184.0]
for price in prices:
print(price) # 184.25, then 184.5, then 184.0range : compter sans liste
range(n) produit les entiers de 0 à n - 1 : la valeur d'arrêt n'est pas incluse, c'est pourquoi range(5) contient cinq nombres. range(start, stop) commence où vous le dites, et range(start, stop, step) avance par pas de step, qui peut être négatif pour compter à rebours. Servez-vous-en pour répéter une action un certain nombre de fois ou parcourir des positions.
# 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]Le motif de l'accumulateur
La plupart des boucles suivent un même schéma : initialiser une variable avant la boucle, la mettre à jour dans la boucle, l'utiliser après. total += price * quantity est un raccourci de total = total + price * quantity. Ici, chaque élément de la liste est une paire, et la ligne de boucle nomme les deux moitiés à la fois (les sujets suivants expliqueront correctement ce déballage).
# 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.0Parcourir des positions
Parfois il faut comparer chaque élément au précédent. Parcourez les positions avec range(1, len(prices)) : elle commence à 1, donc prices[i - 1] est toujours valide. len() donne le nombre d'éléments et prices[i] prend l'élément à la position i, en comptant à 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) # 2Construire une liste au fil de la boucle
Pour recueillir un résultat par tour, partez d'une liste vide [] et appelez .append(value) dans la boucle. Les échelles de prix, les totaux cumulés et les signaux par jour se construisent tous ainsi. La liste est renvoyée (ou utilisée) après la fin de la boucle.
# 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]À suivre : les boucles while, break et continue, pour répéter jusqu'à ce qu'une condition change plutôt que pour un nombre fixe d'éléments.
Lab : ce qui est noté
- Additionner la valeur de plusieurs transactions avec
total_notional25 pts - Dérouler des niveaux de prix avec
price_ladder25 pts - Compter les jours de hausse du prix avec
count_up_days25 pts - Tenir un total cumulé avec
running_total25 pts