Wie Iterationen in Python zu tun
5.1 Aktualisierung der Variablen
Ein gemeinsames Muster in Zuweisungsanweisungen ist eine Zuweisungsanweisung, die eine Variable aktualisiert - in dem der neue Wert der Variablen auf dem alten abhängt. Dies bedeutet, „den aktuellen Wert von x erhalten. Man hinzufügen, und dann x mit dem neuen Wert aktualisieren.“
Wenn Sie versuchen, eine Variable zu aktualisieren, die nicht vorhanden ist, erhalten Sie einen Fehler, weil Python die rechte Seite auswertet, bevor er einen Wert x zuweist. Bevor Sie eine Variable aktualisieren können, müssen Sie es initialisieren, in der Regel mit einer einfachen Zuordnung:
5.2 Die while-Anweisung
Computer werden häufig verwendet, sich wiederholende Aufgaben zu automatisieren. Die Wiederholung gleiche oder ähnliche Aufgaben ohne Fehler zu machen ist etwas, das Computer gut tun und Menschen zu tun schlecht. Weil Iteration so üblich ist, bietet Python mehrere Sprachfunktionen zu erleichtern.
Eine Form der Iteration in Python ist die while-Anweisung. Hier ist ein einfaches Programm, das aus fünf herunterzählt, und dann sagt: „Start!“. Sie können fast die while-Anweisung lesen, als ob es Englisch waren. Es bedeutet: „Während n größer als 0 ist, wird der Wert von n anzuzeigen, und dann den Wert von n um 1 zu reduzieren Wenn Sie auf 0 erhalten, die während Anweisung beenden und das Wort Blastoff sehen!“
Formaler hier ist, der Ablauf der Ausführung für eine while-Anweisung:- Bewerten Sie die Bedingung, Wahr oder Falsch ergibt.
Der Körper der Schleife sollte den Wert von einem oder mehreren Variablen ändern, so dass schließlich die Bedingung falsch wird und die Schleife beendet wird. Wir nennen die Variable, die jedes Mal ändert, die Schleife ausführt und steuert, wenn die Schleife den Iterationsvariable beendet. Wenn es keine Iterationsvariable ist, wiederholt sich die Schleife für immer, in einer Endlosschleife hängen bleibt.
5.3 Endlosschleifen
Eine unerschöpfliche Quelle der Unterhaltung für Programmierer ist die Beobachtung, dass die Richtungen auf Shampoo, „Lather, spülen, wiederholen“, ist eine Endlosschleife, weil es keine Iterationsvariable ist es, Ihnen zu sagen, wie viele Male die Schleife auszuführen.
Im Fall des Countdowns. wir nachweisen können, dass die Schleife beendet, weil wir, dass der Wert von n endlich wissen, und wir können sehen, dass der Wert von n jedes Mal durch die Schleife kleiner wird, so schließlich müssen wir auf 0 Andere Zeiten erhalten eine Schleife offensichtlich ist unendlich, weil es überhaupt keine Iterationsvariable hat.
5.4 „Endlosschleifen“ und Pause
Manchmal weiß man nicht, dass es Zeit ist, eine Schleife zu beenden, bis Sie auf halbem Weg durch den Körper gelangen. In diesem Fall können Sie eine Endlosschleife absichtlich schreiben und dann die break-Anweisung verwenden, aus der Schleife zu springen.
Diese Schleife ist offensichtlich eine Endlosschleife, weil der logische Ausdruck auf der while-Anweisung ist einfach die logische Konstante Wahr. Wenn Sie den Fehler machen und diesen Code ausführen, werden Sie schnell lernen, wie man einen außer Kontrolle geratenen Python-Prozess auf Ihrem System zu stoppen oder finden, wo die Power-Off-Taste auf Ihrem Computer gespeichert ist. Dieses Programm läuft für immer oder bis die Batterie leer ist, weil der logische Ausdruck an der Spitze der Schleife ist auf Grund der Tatsache, immer wahr, dass der Ausdruck der konstanten Wert Wahr ist.
Während dies eine dysfunktionale Endlosschleife ist, können wir immer noch dieses Muster verwenden, um so lange nützlich Schleifen zu bauen, wie wir sorgfältig Code, um den Körper der Schleife hinzufügen explizit die Schleife Pause mit verlassen, wenn wir die Ausgangsbedingung erreicht haben.
Angenommen, Sie Eingabe vom Benutzer zu übernehmen will, bis sie fertig Typen. Man könnte schreiben: Die Schleife Bedingung wahr ist. das ist immer wahr, so dass die Schleife läuft so oft, bis sie die break-Anweisung trifft.
Jedes Mal durch, es fordert den Benutzer mit einem Winkel. Wenn der Benutzer getan. die break-Anweisung verlässt die Schleife. Ansonsten klingt das Programm unabhängig von den Benutzertypen und geht an den Anfang der Schleife zurück. Hier ist ein Probelauf: Diese Schreibweise While-Schleifen gemeinsam ist, weil Sie den Zustand überall in der Schleife überprüfen (und nicht nur an der Spitze), und Sie können die Stoppbedingung bestätigend ( „stoppen, wenn dies der Fall ist“) ausdrücken, anstatt negativ ( „weiter, bis das passiert.“).
5.5 Beenden Iterationen mit weiter
Manchmal bist du in einer Iteration einer Schleife und wollen die aktuelle Iteration beenden und sofort in die nächste Iteration zu springen. In diesem Fall können Sie die continue-Anweisung verwenden, um die nächste Iteration zu überspringen, ohne den Körper der Schleife für die aktuelle Iteration zu beenden.
5.6 Definite Schlaufen für die Verwendung von
Manchmal wollen wir eine Schleife durch eine Reihe von Dingen, wie zum Beispiel einer Liste von Worten, die Zeilen in einer Datei oder eine Liste von Zahlen. Wenn wir eine Liste der Dinge zu durchlaufen haben, können wir eine bestimmte Schleife mit einer for-Anweisung konstruieren. Wir nennen die while-Anweisung eine unbestimmte Schleife, weil es einfach durchlaufen, bis eine bestimmte Bedingung falsch wird während der for-Schleife wird durch einen bekannten Satz von Elementen Looping, so dass es durch so viele Iterationen läuft, da es Elemente in der Reihe sind.
Die Syntax einer for-Schleife ähnelt der while-Schleife, dass es eine for-Anweisung ist und eine Schleife Körper: In Python Begriffe, die variablen Freunde ist eine Liste 1 von drei Saiten und die for-Schleife geht durch die Liste und führt den Körper einmal für jede der drei Strings in der Liste in dieser Ausgabe führen: die Umsetzung dieses for-Schleife auf Englisch ist nicht so direkt wie die Zeit. aber wenn Sie denken, von Freunden als Set. es so geht: „Führen Sie die Anweisungen in dem Körper des in dem Satz namens Freunden für jeden Freund einmal Schleife.“.
Mit Blick auf die for-Schleife, für und in sind Python Schlüsselwörter reserviert, und Freund und Freunde sind Variablen.
für Freund in Freunden:
Druck 'Happy New Year', Freund
Insbesondere Freund ist die Iterationsvariable für die for-Schleife. Der variable Freund ändert für jede Iteration der Schleife und steuert, wann die for-Schleife abgeschlossen ist. Die Iterationsvariable Schritte nacheinander durch die drei Saiten in den Freunden-Variable gespeichert.
5.7 Schleifenmuster
Oft verwenden wir ein für oder while-Schleife durch eine Liste von Gegenständen oder den Inhalt einer Datei zu gehen, und wir suchen nach etwas, wie die größten oder kleinsten Wert der Daten, die wir durch scannen.
Diese Schleifen sind in der Regel aufgebaut durch:- Initialisieren von einer oder mehreren Variablen, bevor die Schleife beginnt.
5.7.1 Zählen und Summieren Schlaufen
Um zum Beispiel die Anzahl der Elemente in einer Liste zu zählen, würden wir die folgende for-Schleife schreiben: Wir setzen Sie die Variable auf Null zurück, bevor die Schleife beginnt, dann schreiben wir eine for-Schleife durch die Liste der Zahlen zu laufen. Unsere Iterationsvariable ist itervar genannt und während wir itervar nicht in der Schleife verwenden, es kontrolliert die Schleife und bewirken, dass der Schleifenkörper für jeden der Werte in der Liste einmal ausgeführt werden.
Im Körper der Schleife, fügen wir ein zu dem aktuellen Wert der Zählung für jeden des Wertes in der Liste. Während die Schleife ausgeführt wird, ist der Wert der Zählung die Anzahl der Werte, die wir „so weit“ gesehen haben.
Sobald die Schleife abgeschlossen ist, ist der Wert der Zählung der Gesamtzahl der Elemente. Die Gesamtzahl „fällt in den Schoß“ am Ende der Schleife. Wir konstruieren die Schleife so, dass wir haben, was wir wollen, wenn die Schleife beendet.
Eine weitere ähnliche Schleife, die die Summe einer Reihe von Zahlen errechnet sich wie folgt: In dieser Schleife tun wir die Iterationsvariable verwenden. Statt einfach einen zur Zählung, wie in der vorherigen Schleife Hinzufügen, fügen wir die tatsächliche Anzahl (3, 41, 12, etc.) an die laufende Summe während jeder Schleifeniteration. Wenn denken Sie über die Variable insgesamt. es enthält die „laufende Summe der Werte so weit“. Also, bevor die Schleife beginnt insgesamt ist Null, da wir noch keine Werte gesehen, während die Schleife insgesamt die laufende Summe ist, und am Ende der Schleife insgesamt ist die Gesamtsumme aller Werte in der Liste.
Da die Schleife ausgeführt wird, sammelt sich insgesamt die Summe der Elemente ist; eine Variable, auf diese Weise verwendet wird, manchmal ein Akkumulator bezeichnet.
Weder die Zählschleife noch die Summationsschleife ist besonders nützlich in der Praxis, weil es sind integrierte Funktionen len () und sum (), das die Anzahl von Elementen in einer Liste aus, und die Summe der Elemente in der Liste jeweils berechnen.
5.7.2 Maximal- und Minimalschleifen
Bevor die Schleife gestartet wird, haben der größte Wert, den wir bisher gesehen ist keine, da wir noch keine Werte gesehen. Während die Schleife ausgeführt wird, wenn größte Keiner ist dann nehmen wir den ersten Wert, den wir bisher als größte sehen. Sie können in der ersten Iteration sehen, wenn der Wert von itervar 3 ist, da größte None ist. wir sofort eingestellt größte 3 zu sein.
Nach der ersten Iteration größte ist nicht mehr Keine. so dass der zweite Teil der Verbindung logischer Ausdruck, itervar prüft> größte nur ausgelöst, wenn wir einen Wert sehen, die größer als die „größte bisher“ ist. Wenn wir einen neuen „noch größer“ Wert sehen nehmen wir, dass neuen Wert für größten. Sie können in der Programmausgabe sehen, die größten von 3 bis 41 zu 74 fortschreitet.
Am Ende der Schleife haben wir alle Werte und die Variable größte gescannt nun den größten Wert in der Liste enthält.
Um die kleinste Zahl zu berechnen, ist der Code sehr ähnlich mit einer kleinen Änderung: Auch kleinste die „kleinste bisher“ ist vor, während und nach der Schleife ausgeführt. Wenn die Schleife beendet hat, enthält kleinste den Minimalwert in der Liste.
Wieder wie in Zählen und Summieren, macht der integrierten Funktionen max () und min () Diese genauen Schleifen überflüssig zu schreiben.
Das folgende ist eine einfache Version des Pythons eingebauten in min () Funktion: In der Funktion Version des kleinsten Code, wir alle Drucks Aussagen entfernt, um in Höhe der Min.-Funktion zu sein, die bereits zu Python-in gebaut .
5.8 Debugging
Wie Sie schreiben größere Programme zu starten, finden Sie vielleicht selbst mehr Zeit Debuggen zu verbringen. Mehr Code bedeutet mehr Chancen, einen Fehler zu machen und mehr Plätze für Fehler zu verbergen.
Eine Möglichkeit, Ihre Debugging-Zeit zu schneiden ist „Debuggen von bisection.“ Zum Beispiel, wenn es 100 Zeilen in Ihrem Programm sind und Sie überprüfen ihnen einen nach dem anderen, wäre es 100 Schritte.
Stattdessen versuchen, das Problem in zwei Hälften zu brechen. Schauen Sie sich die Mitte des Programms oder in der Nähe davon, für einen Zwischenwert können Sie überprüfen. Fügen Sie eine print-Anweisung (oder etwas anderes, das einen nachweisbaren Effekt hat) und das Programm auszuführen.
Wenn die Mittelpunktprüfung nicht korrekt ist, muss das Problem in der ersten Hälfte des Programms sein. Wenn es richtig ist, ist das Problem in der zweiten Hälfte.
Jedes Mal, wenn Sie einen Scheck wie folgt ausführen, halbieren Sie die Anzahl der Zeilen, die Sie suchen müssen. Nach sechs Schritten (die als 100 viel weniger ist), würden Sie bis auf eine oder zwei Zeilen Code, zumindest in der Theorie.
In der Praxis ist es nicht immer klar, was die „Mitte des Programms“ ist und nicht immer möglich, es zu überprüfen. Es macht keinen Sinn, Linien zu zählen und den genauen Mittelpunkt zu finden. Stattdessen denken Sie an Stellen im Programm, wo es möglicherweise Fehler und Orte, an denen es leicht ist, einen Scheck zu setzen. Dann einen Ort zu wählen, wo Sie denken, die Chancen sind etwa gleich, dass der Fehler vor oder nach der Prüfung ist.
5.9 Glossar
Akkumulator: Eine Variable in einer Schleife verwendet addieren oder ein Ergebnis akkumulieren.
Zähler: Eine Variable in einer Schleife verwendet, passierte die Anzahl der Male etwas zu zählen. Wir initialisieren einen Zähler auf Null und erhöht dann den Zähler jedes Mal, wenn wir wollen etwas „zählen“.
Schritt: Ein Update, das den Wert einer Variable (oft von eins) erhöht.
Endlos-Schleife in der A-Schleife die Abbruchbedingung nie erfüllt ist oder für die es keine Abbruchbedingung.
Iteration: wiederholte Ausführung einer Reihe von Anweisungen entweder einen rekursive Funktionsaufruf oder eine Schleife.
5.10 Übungen
Übung 1Write ein Programm, das immer wieder liest Zahlen, bis der Benutzer eingibt „done“. Sobald „done“ eingegeben wird, drucken Sie die Gesamt aus, zählen und Durchschnitt der Zahlen. Wenn der Benutzer etwas anderes als eine Zahl eingibt, erkennen ihre Fehler Versuchen Sie es mit und außer und eine Fehlermeldung und auf die nächste Nummer überspringen.
Übung 2Write ein anderes Programm, das sowohl aus dem Maximum für eine Liste von Zahlen, wie oben und am Ende druckt Aufforderungen und Minimum der Zahlen anstelle des Durchschnitts.
1 Wir werden Listen im Detail in einem späteren Kapitel untersuchen