|
368 | 368 | "source": [ |
369 | 369 | "## while-Schleife\n", |
370 | 370 | "\n", |
371 | | - "Bisher ist es sehr schwierig Code mehrfach auszuführen, wenn wir unsere Programme wiederholen müssen wir sie neu starten. Nicht nur das, sondern haben wir keine Möglichkeit Befehle beliebig häufig auszuführen. Die Möglichkeit Code wiederholt auszuführen ist allerdings für viele Programme ein elementarer Bestandteil. Daher möchten wir uns im dritten Abschnitt dieses Levels mit der while-Schleife beschäftigen, die diese Probleme löst.\n", |
| 371 | + "Bisher hattest du keine Möglichkeit Programmcode wiederholt auszuführen. Das wäre aber sehr hilfreich, damit du nicht wiederholt den selben Code schreiben musst. In Python wird dies (wie in vielen anderen Programmiersprachen auch) mit Schleifen realisiert. In Python gibt es zwei Arten von Schleifen: `While`-Schleife und die `for`-Schleife. In diesem Level lernst du die `while`-Schleife kennen. Du wirst feststellen, dass sie große Gemeinsamkeiten mit der `if`-Bedingung aufweist.\n", |
| 372 | + "\n", |
| 373 | + "Hier siehst du den Aufbau der `while`-Schleife:\n", |
372 | 374 | "\n", |
373 | | - "Die while-Schleife ist im Aufbau ähnlich der if-Bedingung:\n", |
374 | 375 | "```python\n", |
375 | 376 | "while Bedingung:\n", |
376 | 377 | " Befehle\n", |
377 | 378 | "```\n", |
378 | | - "Der Unterschied ist, dass unsere Befehle, solange wiederholt werden, wie die Bedingung gültig (d.h. == True) ist. Hierbei ist Vorsicht geboten, da es zu Endlosschleifen kommen kann." |
| 379 | + "\n", |
| 380 | + "Im Schleifenkopf legst du eine Bedingung fest. Diese Bedingung ist ein boolscher Ausdruck und wird auf seinen Wahrheitswert geprüft. Ist die Bedingung wahr, werden die Befehle im Schleifenrumpf ausgeführt. Danach wird erneut die Bedingung im Schleifenkopf auf ihren Wahrheitswert getestet, ist die Bedingung immer noch war, wird erneut der Schleifenrumpf ausgeführt. Ist die Bedingung jedoch falsch, wird der Durchlauf der Schleife beendet.\n", |
| 381 | + "\n", |
| 382 | + "Wie du vielleicht bemerkt hast, sind die Voraussetzungen an eine `while`-Schleife sehr abstrakt (ähnlich wie bei einer `if`-Bedingung). Dadurch kannst du viele verschiedene Anwendungsfälle mit einer `while`-Schleife darstellen.\n", |
| 383 | + "\n", |
| 384 | + "Im folgenden Codeblock siehst du eine Schleife, die eine `integer` Variable hochzählt. Die Bedingung vergleicht dabei diese Variable mit einem Maximalwert (in dem Fall `10`). Im Beispiel wird die Variable lediglich ausgegeben, du kannst aber natürlich alles erdenkliche mit dem `integer` anstellen." |
379 | 385 | ] |
380 | 386 | }, |
381 | 387 | { |
382 | 388 | "cell_type": "code", |
383 | | - "execution_count": null, |
| 389 | + "execution_count": 1, |
384 | 390 | "metadata": {}, |
385 | | - "outputs": [], |
| 391 | + "outputs": [ |
| 392 | + { |
| 393 | + "name": "stdout", |
| 394 | + "output_type": "stream", |
| 395 | + "text": [ |
| 396 | + "0\n", |
| 397 | + "1\n", |
| 398 | + "2\n", |
| 399 | + "3\n", |
| 400 | + "4\n", |
| 401 | + "5\n", |
| 402 | + "6\n", |
| 403 | + "7\n", |
| 404 | + "8\n", |
| 405 | + "9\n" |
| 406 | + ] |
| 407 | + } |
| 408 | + ], |
386 | 409 | "source": [ |
387 | 410 | "counter = 0\n", |
388 | | - "while counter < 10:\n", |
| 411 | + "maximum = 10\n", |
| 412 | + "while counter < maximum:\n", |
389 | 413 | " print(counter)\n", |
390 | 414 | " counter += 1" |
391 | 415 | ] |
|
394 | 418 | "cell_type": "markdown", |
395 | 419 | "metadata": {}, |
396 | 420 | "source": [ |
397 | | - "Im obigen Codeblock sehen wir eine einfache Anwendung der while-Schleife. Kommentieren wir jedoch die letzte Zeile aus, kommt es zu einer Endlosschleife. In diesem Zusammenhang der Hinweis, dass sich im Interpreter Python Programme durch drücken von Strg + C abbrechen lassen.\n", |
| 421 | + "Du solltest immer darauf achten keine Endlosschleife zu erschaffen. Wenn aus irgendeinem Grund deine Abbruchbedingung niemals `False` werden kann, wird die Schleife endlos laufen. In der Zählschleife oben kann dir dies zum Beispiel leicht passieren, wenn du die Inkrementierung (`counter += 1`) vergisst. In dem Fall würde die `counter` Variable niemals den Wert ändern und daher für immer `< maximum` bleiben. In den Konsole kannst du die Ausführung eines Python-Programms durch die Tastenkombination `Strg + C` abbrechen.\n", |
398 | 422 | "\n", |
399 | | - "Innerhalb einer while-Schleife ist es möglich mit dem Schlüsselwort `break` den Durchlauf der Schleife abzubrechen oder mit dem Schlüsselwort `continue` den aktuellen Durchlauf zu überspringen. Bei der Benutzung von `continue`müssen wir wieder darauf achten keine Endlosschleifen zu erstellen." |
400 | | - ] |
401 | | - }, |
402 | | - { |
403 | | - "cell_type": "code", |
404 | | - "execution_count": null, |
405 | | - "metadata": {}, |
406 | | - "outputs": [], |
407 | | - "source": [ |
408 | | - "print(\"Start.\")\n", |
409 | | - "while True:\n", |
410 | | - " eingabe = input(\"Bitte etwas eingeben: \")\n", |
411 | | - " if not eingabe:\n", |
412 | | - " break\n", |
413 | | - " elif eingabe == \"Q\":\n", |
414 | | - " break\n", |
415 | | - " elif eingabe == \"C\":\n", |
416 | | - " continue\n", |
417 | | - " else:\n", |
418 | | - " print(eingabe)\n", |
419 | | - " print(len(eingabe)*\"-\")\n", |
420 | | - " \n", |
421 | | - "print(\"Fertig.\")" |
422 | | - ] |
423 | | - }, |
424 | | - { |
425 | | - "cell_type": "markdown", |
426 | | - "metadata": {}, |
427 | | - "source": [ |
428 | | - "Das Schlüsselwort `else` kann nicht nur in einer if-Bedingung, sonder auch in Verbindung mit einer while-Schleife benutzt werden. Dabei wird der else-Zweig ans Ende der entsprechenden while-Schleife angefügt. Der Code des else-Zweiges wird dann nur ausgeführt, wenn die Schleife __nicht__ durch ein `break` abgebrochen wurde." |
| 423 | + "Es gibt noch zwei Schlüsselwörter, die dir mehr Kontrolle über den Schleifendurchlauf geben: `break`, `continue` und `else`. Das `break`-Schlüsselwort beendet den Durchlauf der Schleife und springt an Ende. Das `continue`-Schlüsselwort überspringt den Rest des Codeblocks und springt zum Schleifenkopf. Das `else`-Schlüsselwort kann am Ende einer Schleife benutzt werden. Der Codeblock unter dem `else`-Schlüsselwort wird ausschließlich dann ausgeführt, wenn der Durchlauf der Schleife nicht durch ein `break` abgebrochen wurde." |
429 | 424 | ] |
430 | 425 | }, |
431 | 426 | { |
|
437 | 432 | "# Zahlen raten\n", |
438 | 433 | "gesucht = 56\n", |
439 | 434 | "versuche = 10\n", |
440 | | - "zähler = 0\n", |
| 435 | + "zaehler = 0\n", |
441 | 436 | "print(\"Die gesuchte Zahl x ist 0 < x < 100.\")\n", |
442 | 437 | "\n", |
443 | | - "while zähler < versuche:\n", |
| 438 | + "while zaehler < versuche:\n", |
444 | 439 | " eingabe = input(\": \")\n", |
445 | | - " zähler += 1\n", |
| 440 | + " zaehler += 1\n", |
| 441 | + "\n", |
446 | 442 | " # eingabe überprüfen\n", |
447 | 443 | " if eingabe.isdigit():\n", |
448 | 444 | " zahl = int(eingabe)\n", |
449 | 445 | " else:\n", |
450 | 446 | " print(\"Ungültige Eingabe.\")\n", |
451 | 447 | " continue\n", |
452 | | - " \n", |
| 448 | + "\n", |
453 | 449 | " # Benutzer Feedback\n", |
454 | 450 | " if zahl == gesucht:\n", |
455 | 451 | " print(\"Richtig!\")\n", |
|
459 | 455 | " print(\"Kleiner.\")\n", |
460 | 456 | " else:\n", |
461 | 457 | " print(\"Größer\")\n", |
462 | | - " print(\"Noch\", versuche-zähler, \"Versuche.\")\n", |
463 | | - " \n", |
| 458 | + " print(\"Noch\", versuche - zaehler, \"Versuche.\")\n", |
| 459 | + "\n", |
464 | 460 | "\n", |
465 | 461 | "else:\n", |
466 | 462 | " # kein break <=> zahl wurde nicht erraten\n", |
|
472 | 468 | "cell_type": "markdown", |
473 | 469 | "metadata": {}, |
474 | 470 | "source": [ |
| 471 | + "Oben siehst du ein etwas längeres Beispiel, darin sind alle Elemente dieses Levels vereint. Du siehst sowohl `if`-Bedingungen als auch eine `while`-Schleife. In der Schleife werden die drei erwähnten Schlüsselwörter `break`, `continue` und `else` benutzt. In dem Beispiel soll vom Benutzer eine Zahl geraten werden. Dazu hat der Benutzer 10 Versuche. Bei jeder gültigen Eingabe des Benutzers wird dabei eine Tendenz (\"Größer\" oder \"Kleiner\") ausgegeben. Falls der Benutzer eine ungültige Eingabe tätigt, wird der Durchlauf der Schleife übersprungen, gibt der Benutzer die gesuchte Zahl ein, wird der Schleifendurchlauf beendet.\n", |
| 472 | + "\n", |
475 | 473 | "## Rückblick\n", |
476 | | - "Vor diesem Level konnten wir nur sehr begrenzte Programme schreiben. Wir konnten Eingaben entgegennehmen, mit dieser Eingabe Berechnungen (im weitesten Sinne) durchführen und die Ergebnisse dieser Berechnungen wieder ausgeben. Dieses Level hat nun die if-Bedingung und die while-Schleife eingeführt. Diese beiden Kontrollstrukturen ermöglichen uns das Schreiben komplexer Programme und die Implementation anspruchsvoller Algorithmen. die if-Bedingung sorgt dafür, dass unsere Programme nun auf Eingaben zu reagieren und Fehler abzufangen. Die while-Schleife ermöglicht es uns Befehle beliebig häufig auszuführen. Damit sind schon im zweiten Level wichtige Bausteine für komplexe Programme eingeführt worden." |
| 474 | + "\n", |
| 475 | + "Im vorherigen Level hast du gelernt, Eingaben vom Benutzer entgegen zu nehmen, diese zu verarbeiten und das Ergebnis an den Benutzer auszugeben.\n", |
| 476 | + "In diesem Level hast du zwei Kontrollstrukturen kennengelernt, die `if`-Bedingung und die `while`-Schleife. Dazu hast du den Datentyp `boolean` kennengelernt. Durch diese beiden Kontrollstrukturen kannst du komplexere Programme schreiben. Durch die `if`-Bedingung kannst du auf Eingaben des Benutzers oder Änderungen der Umgebung reagieren. Mit der `while`-Schleife kannst du zum Beispiel verschiedene mathematische Algorithmen implementieren." |
477 | 477 | ] |
478 | 478 | } |
479 | 479 | ], |
|
0 commit comments