Pete Moor | Klasse 14r Programmieren mit Python In diesem Kurs lernen Sie: • ... nicht in erster Linie zu programmieren, denn dazu braucht es sehr viel know-how und jahrelange Routine. • Sie erfahren jedoch, dass Computerprogramme ihr tägliches Leben beeinflussen. • Sie erhalten einen Eindruck in das Programmieren, indem Sie einfache Programme in der Programmiersprache Python schreiben und diese ablaufen lassen. • Sie arbeiten mit einfachen Schleifen (while, for) und Verzweigungen (if, else). Inhalt Grundlagen! Arithmetische Operationen! Zahlen (int, float)! Logische Ausdrücke! Zeichenketten (string)! Variablen! Programme nachträglich ändern - in neuem Fenster arbeiten! Turtle ! Grundlagen! Programmausführung! Weiter mit Programmieren ohne Turtle! Kontrollstrukturen (Schleifen und Verzweigungen)! Fallunterscheidungen: if - else Schleife: while Schleife: for Weitere nummerische Anwendung! Weitere Anwendungen mit Turtle! Pete Moor | IKT | Klasse 14r 3 3 4 4 5 5 5 6 6 7 8 8 9 9 11 11 12 2 Die Programmiersprache, mit der wir arbeiten werden, heisst 'Python'. Die Idee zur Entwicklung von Python lag in der guten Lesbarkeit des programmierten Textes. Programmieren heisst, einen Text (Code) in einer Sprache zu schreiben, den der Computer versteht. Python wurde im Jahre 1991 entwickelt. Sie ist ! eine plattformunabhängige Programmiersprache (Unix, Windows, Mac OS X u.a.m.) ! Wir verwenden eine etwas spezielle „Textverarbeitungsanwendung“ um in dieser Sprache zu schreiben: Eine IDLE (Integrated Development Environment), ein Programm, in welchem wir den Text nicht nur schreiben, sondern ihn auch gerade ausführen lassen können. Wir nenne ihn Interpreter und können da Befehle eingeben und diese sogleich ausführen lassen. Grundlagen Arithmetische Operationen Aufgabe 1: Python öffnen und einfache Operationen durchführen • Wählen Sie im Menü „Start“, „Programme“, „Programmieren“, „Python 2.5“, „IDLE (Python GUI)“ • Geben Sie hinter ">>>" folgendes ein: 3 + 4. Drücken Sie dann die <Eingabetaste>. • Probieren Sie weitere Operationen aus Merke Das ">>>"-Zeichen nennt man 'Prompt', hier werden die Programmier-Eingaben vorgenommen, die sogenannten Anweisungen. Aufgabe 2: Verschiedene Operatoren testen Testen Sie die folgenden Operatoren und notieren Sie deren Bedeutung in die folgende Tabelle Operator Bedeutung Operator + / - ** * % Pete Moor | IKT | Klasse 14r Bedeutung 3 Merke Ein Computer ist wirklich ein Rechner! Der Interpreter kann also wie ein Taschenrechner Berechnungen vornehmen. Dabei werden von Python die gewohnten mathematischen Rechengesetze angewandt und das erwartete Ergebnis ausgegeben. Beispiel: >>> ((21 - 3) * 9 + 8) / 4 42 Eine Besonderheit gibt es allerdings: dividiert man 6 durch 4 so gibt der Interpreter 1 aus. >>> 6 / 4 1 Was ist los? Aufgabe 3: Probieren Sie weitere Rechnungen aus und versuchen Sie zu verstehen, wo das Problem liegt. Zahlen (int, float) Merke Wir bewegen uns also im Zahlenraum der ganzen Zahlen int (integer). Möchten wir das korrekte Resultat müssen Gleitkommazahlen float angezeigt werden. Die Angabe mit Punkt (kein Komma) ist dabei notwendig: >>> 6.0/4! oder: ! >>> int(1.75)! 1.5! ! 1! ! oder: ! >>> float(2) 2.0 Logische Ausdrücke Es ist möglich, Zahlen miteinander zu vergleichen: >>> 3 < 4 True Merke Auf solche Vergleiche antwortet der Interpreter mit einem Wahrheitswert, also True oder False. Aufgabe 4: Welche Bedeutung haben die untenstehende Vergleichsoperatoren? Operator Bedeutung Operator < >= > >==< <= != Pete Moor | IKT | Klasse 14r Bedeutung 4 Zeichenketten (string) Eine Programmiersprache muss auch mit Texten umgehen können. Ein Stück Text heisst String und muss in Python mit einfachen oder doppelten Anführungszeichen angegeben werden. Sie können Texte immer auch mit Operatoren verknüpfen. Aufgabe 5: Schreiben Sie 100 mal den folgenden Satz: „Kein facebook während dem IKT!“ Merke Bei Fehlermeldungen erscheint ein roter Text, hier: Unsupported characters input. Also ein nicht unterstützter Buchstabe; Python unterstützt keine Umlaute! in Was müssen Sie in Aufgabe 5 ändern? Hat es nun geklappt? ☞ Für Programmierer/-innen ist Faulheit ein Kompliment ;-) Variablen Von der Algebra her wissen Sie, dass man einer Variablen (Unbekannten) einen Namen geben kann. Das ist beim Programmieren sehr nützlich. In Python können einer Zahl oder Zeichenkette Namen gegeben werden: >>> a=2 >>> a+3 5 Die mit den Namen verknüpfte Werte können später ausgegeben oder in Berechnungen verwendet werden, indem der Name statt des Werts eingegeben wird: >>> a="Hallo" >>> b="Welt" >>> a+" "+b 'Hallo Welt' Programme nachträglich ändern - in neuem Fenster arbeiten Sind die Programme länger und müssen abgeändert werden, so ist das im Interpreter nicht möglich. Also schreiben wir künftig unseren Programmtext in eine Datei, welche dann abgespeichert, jederzeit wieder änderbar sind und ausgeführt werden können. Öffnen Sie dazu das Menü 'File', dann 'New Window'. Schreiben Sie hier Ihr Programm. Lassen Sie es über das Menü 'Run', dann 'Run Module' laufen (oder F5). Sie müssen das Programm zuerst sichern. Aufgabe 6: Ein Programm abändern Erstellen Sie ein Programm, indem Sie 100 Mal "Ich heisse 'Vorname'" schreiben lassen: print 100* "Ich heisse 'Vorname'" (print ist der Befehl für die Bildschirmausgabe) Nun möchten Sie auch noch den Nachnamen schreiben lassen... (voilà der Vorteil!) Pete Moor | IKT | Klasse 14r 5 Turtle Bisher haben Sie einige Grundzüge des Programmierens kennengelernt. Jetzt sollen Sie weiter üben, doch nicht auf dem trockenen Textbildschirm wie bisher, sondern mit Hilfe der Grafik Turtle. Die Idee ist, dass Sie eine Schildkröte (turtle) mit ! Hilfe Ihres Programms bewegen. Und das Schöne ist, dass die Turtle eine Spur hinterlässt – aber sehen Sie selber. Grundlagen Schreiben Sie in ein neues Fenster from turtle import* und starten so das Modul Turtle. Aufgabe 7: schreiben Sie das folgende Programm: from turtle import* forward(100) right(90) forward(100) right(90) forward(100) right(90) forward(100) danach: F5 (run module) drücken und sichern, voilà: Das Turtlefenster (Turtle Graphics) öffnet sich und die Turtle (Pfeil) kriecht und zeichnet ihre Spur! Merke • Es kann sein, dass Sie das Turtlefenster ab und zu zurücksetzen müssen. So schreiben sie im Programmfenster: reset() • Sie können nun die Turtle beliebig auf dem Feld bewegen lassen. Dazu brauchen Sie immer eine Anweisung (z.B. right) und einen spezifischen Wert in Klammer, z.B. (90). Mit right (90) erfolgt also eine Rechtsdrehung um 90 Grad. • Immer wenn Sie nach einer Anweisung die erste Klammer schreiben, werden Sie aufgefordert, einen Wert einzugeben und mit der zweiten Klammer zu quittieren. Aufgabe 8: Freies Ausprobieren verschiedener Befehle Bewegen Sie Turtle frei nach Lust und Laune, indem Sie die nebenstehenden Befehle anwenden. Zeichnen Sie z.B. ein gleichschenkliges Dreieck mit verschieden farbigen Seiten... Tipps: • 'up' und 'down' heben und senken die Turtle ohne Spur • 'goto' erfordert die Koordinaten der x- und y-Achse (mit Komma getrennt). Am Anfang ist die Turtle auf 0,0. • Farben sind englisch, z.B. grün: color("green") • auf folgender Website finden Sie detaillierte Informationen zu den Befehlen und deren Werte: www.michael-holzapfel.de/progs/python/python_turtle.htm Pete Moor | IKT | Klasse 14r forward(distanz) left(winkel) right(winkel) up() down() goto(x,y) color(farbe) width(dicke) reset() fill(0: vor der Form, 1: nach der Form) tracer(0=schnell, 1=langsam) ! 6 Aufgabe 9: Ein Schweizerkreuz zeichnen Wir haben eingangs Programme zum Schweizerkreuz von Hand geschrieben. Realisieren Sie jetzt ein Programm mit der Turtle. Erstellen Sie auch ein Programm für 'H'. Können Sie die Figuren auch farbig gestalten? Voilà, da muss schon recht viel programmiert werden und die Codes werden allmählich lang. Programmieren versucht natürlich genau hier auch rationell zu sein. Wir definieren also beispielsweise vom Quadrat in Aufgabe 7 nur eine Seite und vervielfältigen diese viermal: def Seite (): forward(100) right(90) Seite() Seite() Seite() Seite() Merke Der Begriff 'def' definiert eine Seite mit dem Wert (), der nach dem Doppelpunkt folgt. Dann muss eingerückt sein, was 'Seite' definiert. Am Schluss folgt die Operation, wie mit 'def' berechnet werden soll. Aufgabe 10: Erstellen Sie anhand obiger Angaben einen möglichst kurzen Code für das Zeichnen eines Schweizerkreuzes mit der Seitenlänge '100'. Nicht immer sollen die Linien schwarz und dünn und der Inhalt weiss sein. Die Eigenschaften einer Form (z.B. Strichdicke, Farbe, Länge, ...) nennt man Attribut. Es können also durchaus verschiedene Argumente mit Werten definiert werden. Aufgabe 11: Das Schweizerkreuz mit mehreren Attributen versehen Lösen Sie die Aufgabe 10 mit mehreren Attributen: roter Linie oder Liniendicke 20 oder Länge einer Linie 150 oder .... Programmausführung Das Programm, welches Sie in der Sprache Python schreiben, heisst Quelltext (Datei mit der Endung .py). Der Prozesser des Computers versteht die Sprache Python nicht, er versteht nur seine eigene Maschinensprache. Also muss ein Übersetzungsprogramm diesen Quelltext in die Maschinensprache übersetzen (Datei mit der Endung .pyc). Erst dann kann der Computer das Programm ausführen. Sehen Sie dazu die Abbildung rechts. Dabei braucht es in der Regel einen Texteditor (lat. Erzeuger) in welchem Texte bearbeitet werden und einen Compiler welcher das Programm so übersetzen, dass den Quellcode in die 'Maschinensprache' übersetzt, sowie ein Interpreter, der das Programm dann ausführen lässt. Beispiel: öffnen Sie eine Website, klicken Sie mit rechter Maustaste in Text. Voilà, hier ist der Quellcode dieser Webseite. Hinter jedem Programm stecken Codes! Pete Moor | IKT | Klasse 14r 7 Weiter mit Programmieren ohne Turtle Merke Sie können Texte in Ihre Programme schreiben, die nicht ausgeführt werden, sondern als Bemerkungen/Notizen dienen. Schreiben Sie dazu jeweils vor der entsprechenden Zeile das Zeichen #. Aufgabe 12: Reproduzieren Sie zuerst das folgende Programm und ändern Sie es so, dass die Berechnung der Kreisfläche und -umfang möglich wird (dabei können Sie die #-Zeilen weglassen) # Initialisierung (für das 'r' das Beispiel r=3) pi=3.14 r=3 #Berechnung / Codeblock Umfang=pi*2*r Flaeche=pi*r**2 #Bildschirmausgabe: print "Der Umfang betraegt: " ,Umfang, "cm" print "Die Flaeche betraegt: " ,Flaeche, "cm2" Ändern Sie nun das Programm so ab, dass (ohne die #-Bemerkungen zu schreiben) das Kugelvolumen und die Kugeloberfläche berechnet wird. Kugelvolumen: 4/3*π*r3, Kugeloberfläche: 4π*r2 Richtig spannend wird es natürlich erst, wenn Sie den Radius variabel eingeben können, das Programm Sie also für eine Einfabe auffordert. Dies lösen Sie, indem Sie r folgendermassen definieren: r=input("Geben Sie den Radius in cm ein: ") Merke Durch den Befehl: input("....") ermöglicht also eine nummerische Eingabe. Möchten Sie Text eingeben können, so schreiben Sie raw_input. Aufgabe 13: Schreiben Sie das Programm so um, dass Sie aufgefordert werden, den Radius einzugeben. Aufgabe 14: Erstellen Sie ein kleines Programm, das Sie auffordert den Namen einzugeben und Sie danach mit Ihrem Namen freundlich nach Ihrer Befindlichkeit fragt. Die Bildschirmausgabe sollte also sinngemäss so aussehen: Hallo Sabine, wie geht es Ihnen? Kontrollstrukturen (Schleifen und Verzweigungen) Unter einer Kontrollstruktur versteht man ein Konstrukt, mit dessen Hilfe sich der Ablauf eines Programms steuern lässt. Zwei wesentliche Kontrollstrukturen werden unterschieden: • Verzweigungen (Fallunterscheidungen): hingegen knüpfen einen Codeblock an eine Bedingung, so dass er nur ausgeführt wird, wenn die Bedingung erfüllt ist (if, else). • Schleifen: dienen dazu, einen Codeblock mehrmals auszuführen (while, for). Pete Moor | IKT | Klasse 14r 8 Fallunterscheidungen: if - else Dieser Code wird ausgeführt, wenn Be- if Bedingung: Anweisung dingung True ergibt (wenn). . . . Der Anweisung Code wird nur dann ausgeführt, else: wenn alle Bedingungen False Anweisung . ergeben (sonst). . . Anweisung wichtig: Doppelpunkte beachten Beispiel: a=3 b=5 x=3*(b-a)+4/a if x<5: print "x ist kleiner als 5" else: print "x ist grösser als 5" Aufgabe 15: Erstellen Sie ein eigenes Programm zur Lösung einer arithmetischen Aufgabe. Wie in Aufgabe 13 kann für eine Variable auch ein eigener Wert eingetragen werden. Merke if-else-Anweisungen können auch mit Strings (Zeichenketten) erstellt werden. Z.B.: print "Kennst du das Zauberwort? " print "wie heisst du?" vorname =raw_input("Vorname:") zauber = raw_input("Wie lautet das Zauberwort: ") if (zauber == "Hokus Pokus"): print vorname + ", du wirst zum Zaubermeister ernannt! " else: print "Falsch, du wirst verzaubert, " + vorname + "!" Bemerkung: raw_input(„...“) braucht es bei Text (strings)! Schleife: while Die while-Schleife dient dazu, einen Codeblock so lange auszuführen, wie eine bestimmte Bedingung erfüllt ist. Grundsätzlich besteht eine while-Schleife aus einem Schleifenkopf, in dem die Bedingung steht, sowie einem Schleifenköper, der dem auszuführenden Codeblock entspricht. Merke Die Schleife läuft solange die Bedingung erfüllt ist und nicht bis sie erfüllt ist! Aufgabe 16: Wir entwickeln jetzt ein längeres Programm. Wir wollen Zahlen in einem bestimmten Zahlenraum erraten. Schreiben Sie das untenstehende Programm (links) ab. Eingabe print "Gesucht ist schen 0 und 100" Pete Moor | IKT | Klasse 14r Bereich eine Zahl zwi- Bildschirmausgabe Mit dem Schlüsselwort print chenketten ausgegeben werden. können Zei- 9 gesucht=39 geraten=0 Initialisierung Variablen werden angelegt und mit Werten versehen. Die Zahl '0' ermöglicht den Start. while geraten != gesucht: Schleifenkopf In einer Schleife werden so lange Zahlen vom Benutzer gefordert, wie die gesuchte Zahl noch nicht erraten ist. geraten = input("Raten Sie:") print "Bravo, genau richtig!" Schleifenkörper Der zur Schleife gehörige Block (hier nur eine Zeile) wird durch seine Einrückung bestimmt. Bildschirmausgabe Also: Das Programm läuft so lange, bis geraten ≠ gesucht ist (!=)! Wenn geraten = gesucht: Bravo! Aufgabe 17: Zahlen eingrenzen Die Aufgabe 16 kann sehr lange dauern. Wir wollen so helfen, dass der User Informationen erhält, ob die Zahl zu gross oder zu klein ist. Tipp: if -else (im Schleifenkörper) Weiter wäre es spannend zu wissen, wieviele Versuche man anwenden musste bis zur richtigen Lösung. Tipp: eine zusätzliche Initialisierung, die sich am Ende des Schleifenkörpers immer um 1 erhöht. Initialisieren Sie z.B. i=0 und lassen Sie i jeweils am Ende des Schleifenkörpers um 1 steigern. Merke Man kann auch gegen den Computer spielen. from random import* lädt dann das Modul, das Zufallszahlen ausgeben kann. Dabei bedeutet z.B. der nachfolgende Befehl randint(1,100), dass der Computer eine Zufallszahl zwischen 1 und 100 wählt. Aufgabe 18: Schreiben Sie ein Programm - analog der Aufgabe 17 - in welcher der Computer die gesuchte Zahl selber (per Zufallsprinzip) generiert. Aufgabe 19: Der Computer spielt Yatzy Sie kennen das Würfelspiel mit 5 Würfeln. Wie viele Versuche brauchen Sie, um mit einem Mal alle Würfelzahlen gleich zu würfeln? Wir wollen das programmieren, doch beginnen wir einfacher: 1. Programmieren Sie Python so, dass der Computer mit zwei Würfeln würfelt. Lassen Sie die beiden Zahlen anzeigen (Würfel A: 3, Würfel B: 4).Wenn beide Augenzahlen gleich sind, so erscheint die Meldung „Yatzy!“ und die Schleife soll stoppen (break), sonst „noch einmal würfeln“. • Hilfen: Schreiben Sie zuerst from random import*. So weiss der Computer, dass er nachher selber Werte bestimmen muss. • Beginnen Sie den Schleifenkopf mit while True: • Nun müssen Sie Würfel a und Würfel b bestimmen: randint(1,6) • Um die Schleife nach der Meldung „Yatzy!“ zu stoppen verwenden Sie den Befehl break Pete Moor | IKT | Klasse 14r 10 2. Wenn das Programm einwandfrei läuft, so ändern Sie das Programm so, dass der Computer mit 5 Würfeln würfelt. Achtung, das könnte länger gehen (ich brauchte bei einem Durchgang 3646 Versuche!!!). Also, Programm ist auch mit 3 Würfeln reicht auch ... 3. Hat das auch geklappt, so wäre es spannend zu wissen, wie oft der Computer würfeln musste für ein Yatzy. Jeder neue Versuch soll also zum alten hinzugezählt werden. Hilfe: Anzahl Schleifen zählen, siehe Aufg. 17 (oben: anzahl=0; unten: anzahl=anzahl +1) Schleife: for Die for-Schleife kann im einfachsten Fall als Zählschleife verwendet werden. Sie ermöglicht dem Programmierer also festzulegen, ob ein Codeblock erneut ausgeführt werden soll, so quasi mehrfache Schleifendurchläufe. Struktur Konkret range-Verhalten for Variable in Objekt: Anweisung . . . Anweiung for i in range (5): print i range (stop) range (start, stop) range (start, stop, step) Zahlen 0 bis 4 werden ausgeschrieben. for i in range (0, 10, 2) bedeutet also: Die Zählvariable i beginnt jetzt mit dem Wert 0, die Schleife wird ausgeführt, solange i kleiner ist als 10, und in jedem Schleifendurchlauf wird i um 2 erhöht. Damit gibt die Schleife die Werte 0, 2, 4, 6 und 8 aus. Dabei wird der Wert stop nicht erreicht! Aufgabe 20: negative for-Schleifen oder Strin in for-Schleifen (iterieren) for-Schleifen können auch negativ sein. Veruschen Sie die Werte '40, 30, 20, 10, 0, -10, -20, -30, -40' anzeigen zu lassen. Weitere nummerische Anwendung Aufgabe 21: Das Nim-Spiel verstehen Spielregeln: Es liegen x Hölzchen auf dem Tisch. Zwei Spieler nehmen abwechselnd entweder 1, 2 oder 3 Hölzchen weg. Wer das letzte Hölzchen nimmt, hat verloren. Wir wollen dieses Spiel gegen den Computer spielen. Öffnen Sie das Programm auf dem Server 'bitte', spielen Sie es und lesen Sie den Code. Können Sie ihn nachvollziehen? Pete Moor | IKT | Klasse 14r 11 Weitere Anwendungen mit Turtle Aufgabe 22: Regelmässige Grafiken erzeugen ! Versuchen Sie in Turtle durch Wiederholung einer definierten Form (z.B. Seite und Winkel) regelmässige Grafiken wie rechts zu erstellen. Tipp 1: Durch abweichen von Winkelzahlen (85 statt 90) ergeben sich bei den Quadraten leichte Verschiebungen. Tipp: Wenn Sie nicht die ganze Zeit zusehen wollen können Sie die Turtle beschleunigen: tracer (0) (vor dem eigentlichem Code) Lustig kann auch das Arbeiten mit randint()sein es ist nun alles zufällig! Aufgabe 23: Zeichnen Sie eine einfache Spirale Denken Sie an an die Schleife for, mit welcher Sie die Distanzen regelmässig verändern können. Beginnen Sie mit: a=0 (damit die Turtle ganz in der Mitte beginnt) for i in range (...): Aufgabe 24: Variieren Sie die einfache Spirale von Aufgabe 23 so, dass tolle Ornamente entstehen. Überlegen Sie, wo Sie ansetzen müssen, wenn Sie eine Spirale regelmässig verschieben lassen müssen: muss die Distanz verändert sein oder der Winkel? Pete Moor | IKT | Klasse 14r 12