Einen Block für jedes Element wiederholen
Eine for-Schleife führt ihren eingerückten Block einmal für jedes Element einer Sammlung aus und gibt dem Element für diesen Durchlauf einen Namen. Die Sammlung ist hier eine Liste, geschrieben mit eckigen Klammern und Kommas (Listen bekommen später ein eigenes Thema). Die Syntax gleicht der von if: ein Doppelpunkt am Ende der ersten Zeile und ein eingerückter Block darunter.
prices = [184.25, 184.5, 184.0]
for price in prices:
print(price) # 184.25, then 184.5, then 184.0range: zählen ohne Liste
range(n) erzeugt die ganzen Zahlen von 0 bis n - 1: Der Endwert ist nicht enthalten, deshalb hat range(5) fünf Zahlen. range(start, stop) beginnt, wo Sie wollen, und range(start, stop, step) springt in Schritten von step, der zum Rückwärtszählen negativ sein darf. Nutzen Sie es, wenn etwas mehrfach wiederholt werden soll oder Positionen durchlaufen werden.
# 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]Das Akkumulator-Muster
Die meisten Schleifen folgen einem Muster: eine Variable vor der Schleife anlegen, sie in der Schleife aktualisieren und danach verwenden. total += price * quantity ist die Kurzform von total = total + price * quantity. Hier ist jedes Listenelement ein Paar, und die Schleifenzeile benennt beide Hälften auf einmal (die nächsten Themen erklären dieses Entpacken ausführlich).
# 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.0Positionen durchlaufen
Manchmal muss jedes Element mit dem vorherigen verglichen werden. Durchlaufen Sie die Positionen mit range(1, len(prices)): Sie beginnt bei 1, also ist prices[i - 1] immer gültig. len() liefert die Anzahl der Elemente, und prices[i] holt das Element an Position i, gezählt ab 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) # 2Eine Liste beim Durchlaufen aufbauen
Um pro Durchlauf ein Ergebnis zu sammeln, beginnen Sie mit einer leeren Liste [] und rufen in der Schleife .append(value) auf. Preisleitern, laufende Summen und Tagessignale entstehen alle so. Die Liste wird nach dem Ende der Schleife zurückgegeben (oder verwendet).
# 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]Als Nächstes: while-Schleifen, break und continue, um zu wiederholen, bis sich eine Bedingung ändert, statt für eine feste Zahl von Elementen.
Lab: Was bewertet wird
- Mit
total_notionalden Wert vieler Trades addieren25 Pkt. - Mit
price_ladderPreisstufen auslegen25 Pkt. - Mit
count_up_daysdie Tage mit steigendem Preis zählen25 Pkt. - Mit
running_totaleine laufende Summe führen25 Pkt.