Wiederholen, solange eine Bedingung gilt
Eine while-Schleife prüft vor jedem Durchlauf eine Bedingung und führt ihren Block aus, solange die Bedingung True ist. Verwenden Sie sie, wenn Sie nicht im Voraus wissen, wie viele Durchläufe nötig sind: eine Order halbieren, bis sie klein genug ist, warten, bis ein Preis eine Marke überschreitet, ein Guthaben bis zu einem Ziel wachsen lassen. Etwas im Block muss die Bedingung ändern, sonst endet die Schleife nie.
# 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 oder while?
Verwenden Sie for, wenn Sie die Elemente schon haben oder ihre Anzahl kennen: Es kann nicht ewig laufen. Verwenden Sie while, wenn der Haltepunkt davon abhängt, was während der Schleife passiert. Ein guter Test: Wenn Sie „für jedes dieser“ sagen können, schreiben Sie for; wenn Sie „bis dies wahr wird“ sagen, schreiben Sie while.
while-Schleife drei Dinge: Die Bedingung nutzt eine Variable, die die Schleife ändert, die Änderung passiert bei jedem Durchlauf, und sie führt die Bedingung Richtung False. Läuft eine Schleife hier zu lange, wird sie nach 10 Sekunden gestoppt.break: die Schleife sofort verlassen
break beendet die Schleife sofort und macht mit der Zeile danach weiter. So hören Sie auf, sobald Sie Ihre Antwort haben, etwa beim ersten Preis, der eine Grenze verletzt. Hier durchläuft die Schleife Positionen mit einem Index, den sie selbst erhöht.
# 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: zum nächsten Durchlauf springen
continue überspringt den Rest des aktuellen Durchlaufs und kehrt zur Bedingung zurück. Das ist praktisch, um fehlerhafte Daten zu ignorieren, ohne die eigentliche Arbeit in ein if zu verschachteln. Ändern Sie in einer while-Schleife die Schleifenvariable vor continue; sonst trifft die Schleife ewig auf dasselbe Element.
# 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) # 425Schleifen, die suchen oder konvergieren
Viele Quant-Aufgaben lauten „mach weiter, bis“: aufzinsen bis zu einem Ziel, eine Schätzung verfeinern, bis sie sich nicht mehr ändert, wiederholen, bis eine Anfrage klappt. while True: mit einem break in der Mitte ist eine gängige Form, wenn der Ausstiegstest mitten in der Arbeit liegt.
# 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- Die Bedingung nutzt eine Variable, die die Schleife ändert.
- Die Änderung passiert bei jedem Durchlauf, auch vor einem
continue. - Nutzen Sie
break, sobald die Antwort feststeht.
Als Nächstes: Funktionen definieren und aufrufen, um einem Codeblock einen Namen zu geben und ihn wiederzuverwenden.
Lab: Was bewertet wird
- Mit
halving_stepsdie nötigen Halbierungen einer Order zählen25 Pkt. - Mit
first_breachden ersten Preis über einer Grenze finden25 Pkt. - Mit
sum_until_zerogültige Ausführungen bis zur Endmarke addieren25 Pkt. - Mit
years_to_targetein Guthaben bis zu einem Ziel aufzinsen25 Pkt.