Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:snr:informatik:glf22:python:for [2022/09/19 14:33] – [Aufgabe 2: Summe der Quadratzahlen] Olaf Schnürer | lehrkraefte:snr:informatik:glf22:python:for [2022/10/25 08:30] (current) – [Aufgabe 4: Slalomtext] Olaf Schnürer | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ~~NOTOC~~ | ||
| + | ====== for-loops (for-Schleifen) ====== | ||
| + | |||
| + | <WRAP center round info> | ||
| + | Schleifen werden verwendet, wenn ein Programmteil mehrfach ausgeführt werden soll. In diesem Abschnitt lernst du for-Schleifen kennen. Später werden while-Schleifen erklärt. | ||
| + | |||
| + | Schleifen sind wichtige Kontrollstrukturen; | ||
| + | </ | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Schau dir das folgende Video zu for-loops an. | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | <hidden Endzustand des Programms aus dem Video (mit zusätzlicher Erklärung der Ausgabe am Ende)> | ||
| + | <code python for-loops.py> | ||
| + | anfang = int(input(" | ||
| + | ende = int(input(" | ||
| + | |||
| + | summe = 0 | ||
| + | for x in range(anfang, | ||
| + | print(x) | ||
| + | summe = summe + x | ||
| + | print(" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Wesentliche Inhalte des Videos ===== | ||
| + | |||
| + | <WRAP round info> | ||
| + | Ein einfaches Beispiel einer for-Schleife in Python: | ||
| + | <code python> | ||
| + | for i in range(3, 15): | ||
| + | print(i) | ||
| + | print(" | ||
| + | </ | ||
| + | |||
| + | Beachte: | ||
| + | * Die sogenannte // | ||
| + | * Statt '' | ||
| + | * Der Doppelpunkt '':'' | ||
| + | * Der mehrfach auszuführende Code ist vier Zeichen eingerückt. | ||
| + | * Wenn man die erste Zeile als kompletten Satz lesen will: | ||
| + | * Auf Englisch: "For every '' | ||
| + | * Auf Deutsch: "Für jedes Element '' | ||
| + | </ | ||
| + | |||
| + | |||
| + | <WRAP round info> | ||
| + | Der '' | ||
| + | |||
| + | Der erste Parameter kann optional weggelassen werden und wird dann als '' | ||
| + | </ | ||
| + | |||
| + | ===== Aufgaben zu for-loops ===== | ||
| + | |||
| + | ==== Aufgabe 1: Zahlen und ihre Quadrate ==== | ||
| + | |||
| + | <WRAP round todo> | ||
| + | Schreibe ein Programm, das für alle Zahlen zwischen $1$ und $20$ sowohl die Zahl als auch deren Quadrat ausgibt: | ||
| + | < | ||
| + | Das Quadrat von 1 ist 1. | ||
| + | Das Quadrat von 2 ist 4. | ||
| + | ... | ||
| + | Das Quadrat von 20 ist 400. | ||
| + | </ | ||
| + | |||
| + | <hidden Lösungsvorschlag> | ||
| + | <code python quadrate.py> | ||
| + | for zahl in range(1, 21): | ||
| + | print(" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Aufgabe 2: Summe der Quadratzahlen ==== | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Schreibe ein Python-Programm, | ||
| + | |||
| + | Beispiel: Der Dialog mit dem Programm bei Eingabe 8 soll wie folgt aussehen: | ||
| + | <code text> | ||
| + | Bis zu welcher Zahl soll ich die Quadrate aufsummieren? | ||
| + | Die Summe der Quadrate aller Zahlen von 1 bis 8 ist 204. | ||
| + | </ | ||
| + | |||
| + | Bonus-Teil: Ändere dein Programm so, dass als Ausgabe eine Formel ausgegeben wird, etwa $1+2+3+4+5+6+7+8=204$ bei Eingabe 8. Bei dieser Eingabe soll der Dialog also wie folgt aussehen: | ||
| + | <code text> | ||
| + | Bis zu welcher Zahl soll ich die Quadrate aufsummieren? | ||
| + | 1+2+3+4+5+6+7+8=204 | ||
| + | </ | ||
| + | |||
| + | <hidden Hinweis zum Bonus-Teil> | ||
| + | Definiere am Anfang eine String-Variable '' | ||
| + | Innerhalb der for-Schleife kannst du ein if-statement verwenden, damit nicht zu viele Pluszeichen am Ende erscheinen. | ||
| + | </ | ||
| + | |||
| + | <hidden Lösungsvorschlag> | ||
| + | <code python> | ||
| + | n = int(input(" | ||
| + | summe = 0 | ||
| + | for i in range(1,n + 1): | ||
| + | summe = summe + i*i | ||
| + | print(" | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <hidden Lösungsvorschlag Bonus-Teil> | ||
| + | <code python> | ||
| + | n = int(input(" | ||
| + | |||
| + | summe = 0 | ||
| + | ausgabestring = "" | ||
| + | for i in range(1,n + 1): | ||
| + | summe = summe + i*i | ||
| + | ausgabestring = ausgabestring + str(i * i) | ||
| + | if i < n: | ||
| + | ausgabestring = ausgabestring + " | ||
| + | |||
| + | ausgabestring = ausgabestring + " | ||
| + | print(ausgabestring) | ||
| + | </ | ||
| + | |||
| + | Nicht ganz so schön in der Ausgabe, aber natürlich auch gut: | ||
| + | <code python> | ||
| + | n = int(input(" | ||
| + | |||
| + | summe = 0 | ||
| + | ausgabestring = "" | ||
| + | for i in range(1,n + 1): | ||
| + | summe = summe + i*i | ||
| + | ausgabestring = ausgabestring + " | ||
| + | |||
| + | print(ausgabestring + " | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Aufgabe 3: Muster ausgeben ==== | ||
| + | |||
| + | <WRAP round todo> | ||
| + | Schreibe ein Programm, das eine Zahl als Eingabe entgegennimmt (oder diese am Anfang des Programms in einer Variablen speichert) und dann ein Dreieck der folgenden Form produziert, hier im Fall der Eingabe 6: | ||
| + | <code text> | ||
| + | * | ||
| + | ** | ||
| + | *** | ||
| + | **** | ||
| + | ***** | ||
| + | ****** | ||
| + | </ | ||
| + | |||
| + | <hidden Hinweis> | ||
| + | Verwende " | ||
| + | </ | ||
| + | <hidden Hinweis, wenn dir die Leerschläge am Anfang Probleme machen> | ||
| + | Erzeuge zunächst das folgende Muster und überlege dir dann, wie viele Leerschläge (in Abhängigkeit von der Laufvariablen deiner Schleife) in der entsprechenden Zeile am Anfang einzufügen sind. | ||
| + | <code text> | ||
| + | * | ||
| + | ** | ||
| + | *** | ||
| + | **** | ||
| + | ***** | ||
| + | ****** | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <hidden Lösungsvorschlag> | ||
| + | <code python dreiecks-muster.py> | ||
| + | n = int(input(" | ||
| + | for i in range(1, n + 1): | ||
| + | print((n - i) * " " + i * " | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Aufgabe 4: Slalomtext ==== | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Schreibe ein Programm, das vom Benutzer einen kurzen Text erfragt und diesen dann 100 Mal wie unten illustriert in Slalom-Form ausgibt (maximale Einrückung im Beispiel unten sind 5 Leerschläge, | ||
| + | |||
| + | Damit es nicht zu leicht ist: | ||
| + | <WRAP left round important 100%> | ||
| + | Du darfst nur eine for-Schleife verwenden. | ||
| + | |||
| + | Beliebig viele if-statements sind aber erlaubt! | ||
| + | </ | ||
| + | |||
| + | Bemerkung: Wenn du die Ausgabe zeitlich verzögern willst, importiere am Anfang deines Programms mit '' | ||
| + | |||
| + | <code text> | ||
| + | Gib einen kurzen Satz oder Text ein: Schleifen sind cool! | ||
| + | Schleifen sind cool! | ||
| + | | ||
| + | Schleifen sind cool! | ||
| + | | ||
| + | Schleifen sind cool! | ||
| + | | ||
| + | Schleifen sind cool! | ||
| + | | ||
| + | Schleifen sind cool! | ||
| + | | ||
| + | Schleifen sind cool! | ||
| + | | ||
| + | Schleifen sind cool! | ||
| + | | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | <hidden Hinweis:> | ||
| + | Verwende zwei Variablen: Eine speichert die aktuelle Einrückung und die andere speichert die Veränderung der Einrückung von Zeile zu Zeile: Sie nimmt nur die Werte '' | ||
| + | </ | ||
| + | |||
| + | <hidden Lösungsvorschlag> | ||
| + | <code python> | ||
| + | import time | ||
| + | text = input(" | ||
| + | anfangsabstand = 0 | ||
| + | d = 1 | ||
| + | for i in range(100): | ||
| + | print(anfangsabstand * " " + text) | ||
| + | anfangsabstand = anfangsabstand + d | ||
| + | if anfangsabstand == 13: | ||
| + | d = -1 | ||
| + | if anfangsabstand == 0: | ||
| + | d = 1 | ||
| + | time.sleep(0.05) | ||
| + | </ | ||
| + | Zum Ausschalten der zeitlichen Verzögerung: | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Aufgabe 5: Ausbreitung von Corona ==== | ||
| + | |||
| + | <WRAP round todo> | ||
| + | Schreibe ein Programm, das die Anzahl der Neuansteckungen mit Corona simuliert. | ||
| + | |||
| + | Am Anfang des Programms sollen aktuelle Anzahl und wöchentliche Zuwachsrate (in Prozent) und Simulationszeit (wie viele Wochen?) als Variablen definiert werden. | ||
| + | |||
| + | Hinweis: Um eine Kommazahl (alias float) zu einer ganzen Zahl (alias int) zu runden, verwende den Befeh '' | ||
| + | |||
| + | Die Ausgabe soll beispielsweise wie folgt aussehen: | ||
| + | <code python> | ||
| + | Anzahl der Neuansteckungen heute: 300 | ||
| + | Wöchentliche Zunahme: 17% | ||
| + | Woche 0: 300 | ||
| + | Woche 1: 351 | ||
| + | Woche 2: 410 | ||
| + | Woche 3: 480 | ||
| + | Woche 4: 562 | ||
| + | Woche 5: 657 | ||
| + | Woche 6: 769 | ||
| + | Woche 7: 900 | ||
| + | Woche 8: 1053 | ||
| + | Woche 9: 1232 | ||
| + | Woche 10: 1442 | ||
| + | Woche 11: 1687 | ||
| + | Woche 12: 1974 | ||
| + | </ | ||
| + | |||
| + | <hidden Lösungsvorschlag> | ||
| + | <code python corona.py> | ||
| + | neuansteckungen = 300 | ||
| + | zunahmeInProzent = 17 | ||
| + | simulationsZeit = 12 | ||
| + | |||
| + | print(" | ||
| + | print(" | ||
| + | |||
| + | # Zunahme pro Woche als Faktor | ||
| + | zunahme = 1 + zunahmeInProzent / 100 | ||
| + | kranke = neuansteckungen | ||
| + | for w in range(0, simulationsZeit + 1): | ||
| + | print(" | ||
| + | kranke = zunahme * kranke | ||
| + | </ | ||
| + | Etwas kürzer, aber wohl weniger verständlich: | ||
| + | <code python corona-alternative.py> | ||
| + | |||
| + | # Alternative: | ||
| + | neuansteckungen = 300 | ||
| + | zunahmeInProzent = 17 | ||
| + | simulationsZeit = 12 | ||
| + | print(" | ||
| + | print(" | ||
| + | for w in range(0, simulationsZeit + 1): | ||
| + | print(" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Verschachtelte for-Schleifen ===== | ||
| + | |||
| + | <WRAP round box todo> | ||
| + | Innerhalb einer for-Schleife können weitere for-Schleifen stehen (und auch if-else statements etc). Lass das folgende Programm auf deinem Rechner laufen und verstehe es: | ||
| + | <code python> | ||
| + | for i in range(3): | ||
| + | print(" | ||
| + | for j in range(3): | ||
| + | print(" | ||
| + | print(" | ||
| + | print(" | ||
| + | print(" | ||
| + | </ | ||
| + | |||
| + | Manchmal ist es sinnvoll, einen Ausgabe-String schrittweise aufzubauen, wie im folgenden Python-Programm. Versuche, es zu verstehen. | ||
| + | Warum habe ich die " | ||
| + | <code python> | ||
| + | for y in range(10): | ||
| + | s = "" | ||
| + | for x in range(10): | ||
| + | s = s + " | ||
| + | print(s) | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Aufgabe: Kleines Einmaleins bzw. Multiplikationstabelle (mit unschön formatierter Ausgabe) ==== | ||
| + | |||
| + | <WRAP round todo> | ||
| + | Schreibe ein Programm, das abhängig von einer Variablen '' | ||
| + | <code text> | ||
| + | 1 2 3 4 5 6 7 8 9 10 | ||
| + | 2 4 6 8 10 12 14 16 18 20 | ||
| + | 3 6 9 12 15 18 21 24 27 30 | ||
| + | 4 8 12 16 20 24 28 32 36 40 | ||
| + | 5 10 15 20 25 30 35 40 45 50 | ||
| + | 6 12 18 24 30 36 42 48 54 60 | ||
| + | 7 14 21 28 35 42 49 56 63 70 | ||
| + | 8 16 24 32 40 48 56 64 72 80 | ||
| + | 9 18 27 36 45 54 63 72 81 90 | ||
| + | 10 20 30 40 50 60 70 80 90 100 | ||
| + | </ | ||
| + | |||
| + | <hidden Hinweis> | ||
| + | Bau den Ausgabe-String für jede Zeile sukzessive in der inneren for-Schleife auf (ähnlich wie im obigen Beispielprogramm). | ||
| + | </ | ||
| + | |||
| + | <hidden Lösungsvorschlag> | ||
| + | <code python einmaleins.py> | ||
| + | n = 13 | ||
| + | for x in range(1, n + 1): | ||
| + | s = "" | ||
| + | for y in range(1, n + 1): | ||
| + | s = s + str(x * y) + " " | ||
| + | print(s) | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Bonus-Aufgabe: | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Schreibe ein Programm, das eine Liste aller Primzahlen bis zu einer Zahl '' | ||
| + | |||
| + | <hidden Hinweis> | ||
| + | Gehe mit einer äusseren Schleife alle Zahlen von 2 bis '' | ||
| + | |||
| + | Test auf Primalität (= Primzahl-Sein) dieser Zahl (im Codeblock der äusseren Schleife): | ||
| + | Verwende eine boolesche Variable '' | ||
| + | </ | ||
| + | |||
| + | <hidden Lösungsvorschlag> | ||
| + | <code python primzahlliste.py> | ||
| + | # Bis zu dieser Zahl wird die Primzahlliste erzeugt. | ||
| + | n = 100 | ||
| + | # Der Ausgabestring, | ||
| + | s = "" | ||
| + | for zahl in range(2, n + 1): | ||
| + | # Solange wir keinen Teiler von zahl kennen, tun wir so, als ob es sich um eine Primzahl handelt. | ||
| + | istPrim = True | ||
| + | for teilerKandidat in range(2, zahl): | ||
| + | # Test, ob teilerKandidat ein Teiler von zahl ist: | ||
| + | if zahl % teilerKandidat == 0: | ||
| + | # Teiler gefunden! zahl ist keine Primzahl. | ||
| + | istPrim = False | ||
| + | if istPrim == True: | ||
| + | s = s + str(zahl) + ", " | ||
| + | print(s) | ||
| + | </ | ||
| + | Bemerkungen: | ||
| + | * Es würde reichen, wenn wir '' | ||
| + | * Es gibt schnellere Methoden, eine solche Primzahlliste zu erstellen, etwa das Sieb des Eratosthenes. Hier geht es einfach darum zu zeigen, dass wir bereits eine solche Liste erstellen können. | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ====== f-strings (formatted strings = formatierte Zeichenketten) und end-Parameter beim print-Befehl ====== | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Schau dir das folgende Video an. | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | <hidden Programm, das die wesentlichen Beispiele aus dem Video enthält> | ||
| + | <code python f-strings-und-end-parameter-bei-print.py> | ||
| + | x = 123456 | ||
| + | print(f" | ||
| + | t = f" | ||
| + | print(t) | ||
| + | t = f" | ||
| + | # oder gleichbedeutend | ||
| + | # t = f" | ||
| + | print(t) | ||
| + | t = f" | ||
| + | print(t) | ||
| + | |||
| + | x = " | ||
| + | t = f" | ||
| + | print(t) | ||
| + | t = f" | ||
| + | # oder gleichbedeutend | ||
| + | # t = f" | ||
| + | print(t) | ||
| + | |||
| + | x = 1/7 | ||
| + | t = f" | ||
| + | print(t) | ||
| + | t = f" | ||
| + | print(t) | ||
| + | |||
| + | # Optionale Angabe des end-Parameters beim print-Befehl. (Was macht der Cursor nach der Ausgabe? Standardmässig geht er in die nächste Zeile.) | ||
| + | print(" | ||
| + | print(" | ||
| + | |||
| + | print(" | ||
| + | print(" | ||
| + | |||
| + | print(" | ||
| + | print(" | ||
| + | |||
| + | # Standardeinstellung: | ||
| + | print(" | ||
| + | print(" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Aufgaben zu f-strings ===== | ||
| + | |||
| + | ==== Aufgabe 1: f-strings in der Python-Shell testen ==== | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Gehe in die Python-Shell und definiere Variablen '' | ||
| + | Wenn du nun etwa '' | ||
| + | |||
| + | Was musst du eingeben, um als Ergebnis ... | ||
| + | * den Wert von '' | ||
| + | * den Wert von '' | ||
| + | * den Wert von '' | ||
| + | * den Wert von '' | ||
| + | |||
| + | <hidden Lösung> | ||
| + | Die gesuchten Befehle sind: | ||
| + | <code python> | ||
| + | f" | ||
| + | f" | ||
| + | f" | ||
| + | f" | ||
| + | f" | ||
| + | f" | ||
| + | f" | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Bemerkung: Wenn du nicht mit Variablen arbeiten willst, kannst du statt '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== Aufgabe 2: f-strings in for-Schleife ==== | ||
| + | |||
| + | <WRAP round todo> | ||
| + | Zuvor hast du hoffentlich ein Programm geschrieben, | ||
| + | < | ||
| + | Das Quadrat von 1 ist 1. | ||
| + | Das Quadrat von 2 ist 4. | ||
| + | ... | ||
| + | Das Quadrat von 20 ist 400. | ||
| + | </ | ||
| + | <hidden Lösungsvorschlag> | ||
| + | <code python quadrate.py> | ||
| + | for zahl in range(1, 21): | ||
| + | print(f" | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== Aufgabe 3: Formatierte Multiplikationstabelle; | ||
| + | |||
| + | <WRAP round todo> | ||
| + | Vereinbarung: | ||
| + | |||
| + | (1) Ändere dein obiges Programm zur Multiplikationstabelle so, dass die Ausgabe im Fall '' | ||
| + | <code text> | ||
| + | 1 2 3 4 5 6 7 8 9 10 | ||
| + | 2 4 6 8 | ||
| + | 3 6 9 | ||
| + | 4 8 | ||
| + | 5 | ||
| + | 6 | ||
| + | 7 | ||
| + | 8 | ||
| + | 9 | ||
| + | | ||
| + | </ | ||
| + | |||
| + | (2) Bonus-Teil: Verbessere die Ausgabe weiter: Im Fall '' | ||
| + | <code text> | ||
| + | * | 1 2 3 4 5 6 7 8 9 10 | ||
| + | --------------------------------------------------------- | ||
| + | 1 | 1 2 3 4 5 6 7 8 9 10 | ||
| + | 2 | 2 4 6 8 | ||
| + | 3 | 3 6 9 | ||
| + | 4 | 4 8 | ||
| + | 5 | 5 | ||
| + | 6 | 6 | ||
| + | 7 | 7 | ||
| + | 8 | 8 | ||
| + | 9 | 9 | ||
| + | 10 | | ||
| + | </ | ||
| + | <hidden Lösungsvorschlag zu (1) mit sukzessiven Aufbau der Ausgabestrings> | ||
| + | <code python> | ||
| + | n = 13 | ||
| + | for x in range(1, n + 1): | ||
| + | s = "" | ||
| + | for y in range(1, n + 1): | ||
| + | s = s + f" | ||
| + | print(s) | ||
| + | </ | ||
| + | </ | ||
| + | <hidden Lösungsvorschlag zu (1) mit Verwendung des end-Parameters bei print> | ||
| + | <code python> | ||
| + | n = 13 | ||
| + | for x in range(1, n + 1): | ||
| + | for y in range(1, n + 1): | ||
| + | print(f" | ||
| + | print() | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <hidden Lösungsvorschlag zu (2) mit sukzessivem Aufbau der Ausgabestrings> | ||
| + | <code python> | ||
| + | n = 13 | ||
| + | |||
| + | s = " | ||
| + | # oder eleganter (beachte die verschiedenen Anführungszeichen!) | ||
| + | # s = f" | ||
| + | for y in range(1, n + 1): | ||
| + | s = s + f" | ||
| + | print(s) | ||
| + | |||
| + | print((5 + 2 + n * 5) * " | ||
| + | |||
| + | for x in range(1, n + 1): | ||
| + | s = f" | ||
| + | for y in range(1, n + 1): | ||
| + | s = s + f" | ||
| + | print(s) | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <hidden Lösungsvorschlag zu (2) mit Verwendung des end-Parameters bei print> | ||
| + | <code python> | ||
| + | n = 13 | ||
| + | |||
| + | print(" | ||
| + | # oder eleganter (beachte die verschiedenen Anführungszeichen!) | ||
| + | # print(f" | ||
| + | for y in range(1, n + 1): | ||
| + | print(f" | ||
| + | print() | ||
| + | |||
| + | print((5 + 2 + n * 5) * " | ||
| + | |||
| + | for x in range(1, n + 1): | ||
| + | print(f" | ||
| + | for y in range(1, n + 1): | ||
| + | print(f" | ||
| + | print() | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <hidden Experten-Bemerkung> | ||
| + | Eigentlich sollte der Abstand (den wir hier als 5 festgelegt haben) abhängig von der Länge (als String) des längsten Produkts gewählt werden. Dies geht auch mit f-strings, wurde aber bisher nicht erklärt. | ||
| + | Das Programm (mit sukzessivem Aufbau der Ausgabestrings) würde dann so aussehen: | ||
| + | <code python> | ||
| + | n = 33 | ||
| + | # Bemerkung: Der Befehl " | ||
| + | abstand = len(str(n*n)) + 1 | ||
| + | |||
| + | s = f" | ||
| + | for y in range(1, n + 1): | ||
| + | s = s + f" | ||
| + | print(s) | ||
| + | |||
| + | print((abstand + 2 + n * abstand) * " | ||
| + | |||
| + | for x in range(1, n + 1): | ||
| + | s = f" | ||
| + | for y in range(1, n + 1): | ||
| + | s = s + f" | ||
| + | print(s) | ||
| + | </ | ||
| + | Beachte die zusätzlichen geschweiften Klammern um den " | ||
| + | |||
| + | Mir ist nicht ganz klar, warum diese verlangt werden; man könnte dies aber so begründen: Python erwartet als " | ||
| + | |||
| + | Teste dies in der Python-Shell: | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ====== Bonusmaterial: | ||
| + | |||
| + | ===== range-Befehl mit Schrittweite ===== | ||
| + | |||
| + | <WRAP round todo> | ||
| + | Teste in der Python-Shell die folgenden Befehle und versuche, das Ergebnis zu verstehen! | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | <hidden Lösung:> | ||
| + | In der 1-Parameter-Variante von Range: Der Endparameter sollte positiv sein, sonst ist der Bereich leer. | ||
| + | |||
| + | In der 2-Parameter-Variante von Range: Der Startparameter sollte kleiner als der Endparameter sein, sonst ist der Bereich leer. | ||
| + | |||
| + | Es gibt auch die 3-Parameter Variante '' | ||
| + | * '' | ||
| + | * '' | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <WRAP round box> | ||
| + | Stets kann man versuchen, sich im Internet schlau zu machen, wenn etwas unklar ist. Die Kunst ist hier, die richtigen (englischen) Suchbegriffe zu finden. Manchmal ist dies relativ verständlich: | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | Manchmal (aktuell vermutlich) eher nicht: | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | </ | ||
| + | |||
| + | ===== print mit mehreren Ausgabeargumenten und Parameter sep ===== | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Teste das folgende Python-Programm und finde heraus, was du dabei lernen sollst! | ||
| + | <code python print-mehrere-argumente-und-sep.py> | ||
| + | print(" | ||
| + | x = 3 | ||
| + | y = 7 | ||
| + | z = 13 | ||
| + | print(x, y, z) | ||
| + | print(x, y, z, sep = " | ") | ||
| + | |||
| + | print(" | ||
| + | print(" | ||
| + | print(" | ||
| + | |||
| + | for i in range(1, 6): | ||
| + | print(i, i*i, i*i*i, i*i*i*i, sep = " | ", end = " |\n") | ||
| + | |||
| + | # ... wobei Letzteres (verschönert) einfacher mit einem einzigen f-string geht: | ||
| + | for i in range(1, 6): | ||
| + | print(f" | ||
| + | </ | ||
| + | |||
| + | <hidden Lösung> | ||
| + | Der '' | ||
| + | |||
| + | Mit dem Zusatzparameter '' | ||
| + | |||
| + | Wie oben bereits erklärt, kann man mit dem Zusatzparameter '' | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Link zur Kursseite ===== | ||
| + | |||
| + | [[lehrkraefte: | ||