Programmieren lernen mit Python Hack Programmieren lernen mit Python Programmieren lernen mit Python Idle Idle ist eine einfache Programmierumgebung für Python, die aus zwei Teilen besteht: • Editor und Shell Im Editor kann man Programme schreiben, in der Shell kann man verschiedene Dinge ausprobieren – und damit fangen wir an: Die Python-Shell meldet sich mit der Python-Version (hier 2.7.3). Nach der Eingabeaufforderung (im Englischen: Prompt) >>> Kann der Programmierer etwas eingeben, hier war das: a = 5 Das bedeutet: Im Rechner wird in einen Speicherbereich mit dem Namen a die Zahl 5 geschrieben. Das Gleichheitszeichen hat also eine andere Bedeutung wie in der Mathematik, es steht für eine Wertzuweisung. Das Gleichheitszeichen nennt man auch Zuweisungsoperator. Nachdem der Variablen b (Variable ist beim Programmieren gleichbedeutend mit Speicherbereich) die Zahl 6 zugewiesen wurde, werden die Variablen a und b addiert und ausgegeben. Nun wird den Variablen a und b eine Zeichenkette zugewiesen, d.h. die alten Werte gehen verloren, die Variablen enthalten keine Zahlen mehr sondern Zeichenketten. Der Plus-Operator hat bei Zeichenketten eine andere Wirkung als bei Zahlen, er fügt sie einfach zusammen. Manchmal geht auch etwas schief. Im letzen Teil wird versucht, mit dem Plus-Operator eine Zeichenkette (str steht für String) und eine Zahl (int steht für Integer, also „ganze Zahl“) zu verbinden. Das muss natürlich schief gehen und Python meldet einen TypeError, d.h. die verwendeten Datentypen Zahl und Zeichenkette können auf diese Weise nicht verarbeitet werden. Die folgende Tabelle gibt dir einen Überblick über einfache Datentypen und Operatoren in Python. Programmieren lernen mit Python Operatoren Arithmetische Operatoren Operator Beschreibung Beispiele für a=2 b=5 + Addition a + b ➞ 7 - Subtraktion a - b ➞ * Multiplikation a * b ➞ 10 / Division in Python 2.x mit zwei ganzen Zahlen, und bei mindestens einer Kommazahl b / a ➞ 2 b / 2.0 ➞ 2.5 / Division in Python 3.x b / a ➞ 2.5 % Modulo- oder Restpoperator (5:2=2 Rest 1) b % a ➞ 1 ** Potenzoperator a**b ➞ 32 // Ganzzahldivision (nur ab Python Version 3.x) b//a ➞ 2 –3 Vergleichsoperatoren Operator Beschreibung Beispiele für a=2 und b=5 == Prüft, ob die Operanden gleich sind a == b ➞ False != Prüft, ob die Operanden ungleich sind a != b ➞ True <> wie != a <> b ➞ True > Prüft, ob der linke Operand größer ist als der rechte a > b ➞ False >= Wie oben, lässt aber Gleichheit zu a >= b ➞ False < Prüft, ob der linke Operand kleiner ist als der rechte a < b ➞ True <= Wie oben, lässt aber Gleichheit zu a <= b ➞ True Zuweisungsoperatoren Operator c vorher Beschreibung a=2 und b=5 c nacher = Weist die rechte Seite der linken zu ? c = a + b 7 += Äquivalent zu c = c + x 7 c += a 9 -= Äquivalent zu c = c - x 9 c -= b 4 *= Äquivalent zu c = c * x 4 c *= a 8 /= Äquivalent zu c = c / x 8 c /= a 4 %= Äquivalent zu c = c % x 8 c %= b 3 **= Äquivalent zu c = c ** x 3 c **= a 9 Logische Operatoren Operator Beschreibung a b a and b A or b not a and Logisches UND True True True True False or Logisches ODER True False False True False not Logisches NICHT False True False True True False False False False True Programmieren lernen mit Python EVA Jedes Programm verarbeitet Daten, dies von irgendwoher erhalten hat und gibt sie wieder aus. Das ist das EVA-Prinzip: • • • Eingabe Verarbeitung Ausgabe In einem Python-Programm sieht das so aus: Programm: Ausgabe: Lesen und verstehen • Zeilen, die mit dem #-Zeichen beginnen sind Kommentare, sie haben keinen Einfluss auf das Programm. Durch sie werden Ideen oder Verarbeitungsschritte umgangssprachlich beschrieben, damit sie besser verständlich sind. • input ist eine Funktion. Funktionen haben nach ihrem Namen runde Klammern in denen ihre Parameter stehen. Diese Funktion kann eine Zeichenkette als Parameter haben – muss aber nicht. Parameter sind von Funktion zu Funktion verschieden und für den Programmierer ist es wichtig, diese Parameter zu kennen um die Funktion korrekt aufzurufen. Ebenso wichtig ist die Kenntnis der sog. Rückgabewerte. Die Funktion input gibt einen Zahlenwert zurück, der jeweils den Variablen a und b zugewiesen wird. • Die Verarbeitung der Eingabedaten ist hier die Bildung des Produkts, das der Variablen c zugewiesen wird. • Die Ausgabe erfolgt schließlich mit print, wobei die Ausgabedaten durch Kommas getrennt aufgezählt werden. Dies ist die Zeichenkette “Das Produkt ist“ sowie der augenblickliche Wert der Variablen c. Programmieren lernen mit Python Nun geht’s ans Programmieren Aller Anfang ist schwer! Gehe so vor: 1. Öffne IDLE, die Programmierumgebung von Python. 2. Wähle aus dem Menü: File – New Window 3. Schreibe das Programm. 4. Speichere es unter dem angegebenen Namen in „Eigene Dateien“ ab. 5. Starte es mit dem Menüpunkt: Run – Run Module 6. Sollten Fehler auftauchen: Korrigieren und mit Punkt 5 weiter machen. Versuche folgende Programme zu schreiben, erzeuge dabei „sprechende“ Ausgaben. Speichere sie unter den angegebenen Dateinamen ab. Wenn du nicht klar kommst, schau dir die Lösungen an und schreibe sie ab. Aber versuche es bei jeder Aufgabe zunächst selbst. 1. grundrechenarten.py Eingabe: 2 Zahlen a und b Ausgabe: Summe, Differenz, Produkt, Quotient 2. F2C.py rechnet Grad Celsius in Grad Fahrenheit um. celsius = (fahrenheit-32)*5/9 Beachte hierbei die Besonderheit der Division in Python 2.x (s. Operatoren) 3. C2F.py rechnet Grad Fahrenheit in Grad Celsius um. 4. hms2h.py rechnet Stunden, Minuten Sekunden in Stunden um. 5. kapital.py berechnet das Kapital K eines Grundbetrags G nach n Jahren bei einem n p Zinssatz von p% mit der Formel K =G⋅ 1+ 100 ( ) 6. quader.py berechnet nach der Eingabe dreier Kantenlängen die Gesamtlänge der Kanten, Oberfläche und Volumen. 7. Widerstand.py gibt den Gesamtwiderstand R der folgenden elektrischen Schaltung aus. 1 Parallelschaltung: R= , Reihenschaltung: R= Ra + R b 1 1 + R a Rb Zusatzaufgaben: 8. Reste7.py zeigt, dass die Summe der 7er-Reste zweier Zahlen gleich dem 7er-Rest der Summe der Zahlen ist und das selbe auch für das Produkt gilt. 9. Reste.py wie Reste7.py nur kein 7er-Rest: der Teiler wird angegeben! 10. h2hms.py rechnet Stunden in Stunden, Minuten Sekunden um. Beispiel 2,8h = 2h 48min; 2.81 = 2h 48min 36sek (Tipp: Benutze den %-Operator und die Funktion int(Zahl). Sie schneidet von einer Kommazahl die Nachkommastellen ab und liefert eine ganze Zahl. ) Programmieren lernen mit Python Lösungen Programmieren lernen mit Python Programmieren lernen mit Python Programmieren lernen mit Python Programmieren lernen mit Python Selektion Eine quadratische Gleichung kann keine, eine oder zwei Lösungen haben, je nachdem die Diskriminante (das was unter der Wurzel steht) kleiner, gleich oder größer Null ist. Zur Planung des Programms benutzen wir ein Struktogramm: Python-Programm: Als erstes wird das Modul math importiert, das die benötigte Wurzelfunktion sqrt (engl: square root) enthält. Diese if-elif-else -Konstruktion heißt Selektion, sie ermöglicht es, die eingerückten Programmteile nur unter bestimmten Voraussetzungen auszuführen. Einrückungen werden nach einem Doppelpunkt automatisch eingeleitet! Aus die reservierten Wörter if und elif (steht für else if) folgen Bedingungen, der Teil nach else wird nur dann ausgeführt, wenn keine der vorausgegangenen Bedingungen erfüllt war. Programmieren lernen mit Python Das folgende Syntaxdiagramm zeigt, dass in Python ein if-Statement mit if beginnt, beliebig viele (auch keine) elif -Bedinungen folgen können, und dass höchstens ein else -Teil vorhanden sein kann. Bedingungen sind boolsche Ausdrücke, sie repräsentieren einen der Wahrheitswerte True oder False. Ein if- oder elif-Block wird nur dann ausgeführt, wenn die Bedingung den boolschen Wert True hat. Wahrheitswerte können mit den Operatoren not, and und or verknüpft werden. Kommen mehrere Operatoren in einem Ausdruck vor ist die Rechenreihenfolge not vor and vor or. Aufgaben 1. BMI.py berechnet aus Körpergröße h in m und Gewicht G in kg den Body Mass Index BMI = G/h2. Die Ausgabe ist der BMI und der Zusatz: Untergewicht für BMI <= 19, Normalgewicht für 19 < BMI <=25, Übergewicht für BMI > 25. (Anmerkung: Die Aussagekraft des BMI ist in der Medizin umstritten!) 2. Erweitere die vorhergehende Aufgabe um Adipositas (starkes Übergewicht) für BMI > 30. 3. knobel.py soll bei einer Eingabe von „Schere – Stein – Papier“ der Spieler A und B den Sieger ermitteln. Hinweis: Die Eingabe von Zeichenketten wie „Schere“ erfolgt nicht mit input(“Spieler A: “) sondern mit raw_input(“Spieler A: “). Beachte auch den Fall einer unzulässigen Eingabe! Programmieren lernen mit Python 4. Wechselgeld.py wechselt 2€- und 1€-Münzen in 50ct-Münzen, 50ct-Münzen in 10ctMünzen. Ansonsten gibt er die eingeworfene Münze zurück. 5. Rabatt.py ermittelt den Rabatt für einen gegebenen Rechnungsbetrag R nach folgender Regel: R < 500€ kein Rabatt, 3% für 500€ <= R < 1000€, 5% für 1000€ <= R < 2000€ und 8% für R >= 2000€. Beispiel: Rechnungsbetrag: 800 (Eingabe) abzgl. 3% Rabatt = 776EUR (Ausgabe) 6. Gleichung.py bestimmt für x die Lösungsmenge der Gleichung a x=b . 7. Durch je drei der Größen Länge, Breite, Höhe und Volumen eines Quaders sind die übrigen berechenbar. Im Programm quadermenue.py wird für die zu berechnenden Größen eine 0 eingegeben. Zusatzaufgaben: 8. Ergänze in der vorhergehenden Aufgabe: Oberfläche! 9. Eine Zahl zwischen 1 und 100 soll mit Hilfe des Programms Zweier.py ins Zweiersystem umgerechnet werden. 10. schnittpunkt.py berechnet den Schnittpunkt zweier Geraden (y = mx+c) falls sie nicht parallel oder identisch sind. Programmieren lernen mit Python while-Schleifen Es kommt oft vor, dass Programmteile mehrmals durchlaufen werden. Eine solche Konstruktion nennt man Schleife. Das folgende Programm addiert alle Zahlen zwischen 1 und 100. Eine Schleife besteht aus drei Teilen: 1. der Initialisierung, in der die Variable auf die Anfangswerte gesetzt werden. 2. Der Schleifenkopf prüft, ob die angegebene Bedingung zum Zutritt erfüllt ist. 3. Der Schleifenkörper enthält die zu wiederholenden Anweisungen. Die Schleifensteuerung geschieht hier durch die Variable i, die vor der Schleife initialisiert wird. Der Schleifenkopf wird durch das reservierte Wort while eingeleitet, gefolgt von einem boolschen Ausdruck mit der Steuerungsvariablen, der einen Wahrheitswert true oder false liefert und dem Doppelpunkt. Solange i kleiner oder gleich n ist werden die eingerückten Zeilen (der Schleifenkörper) wiederholt. Da im Schleifenkörper die Variable i jeweils um 1 erhöht wird, erreicht i irgendwann den Wert 101, worauf die Schleife verlassen wird und die Ausgabe erfolgt. Würde i nicht erhöht werden, käme das Programm nie zum Halt. Aus diesem Grund erfordert die Verwendung von Schleifen größte Sorgfalt bei der Programmierung. Aufgaben: 1. a) Ändere das obige Programm schleife.py so ab, dass bei jedem Schritt die Zwischensumme angegeben wird. b) Ändere das obige Programm schleife.py so ab, dass bei jedem 10. Schritt die Zwischensumme angegeben wird. 2 2. wertetabelle.py erzeugt eine Tabelle für die Funktion f ( x)=x ; x ∈{−10, ...9,10} 3. Eine Zahlenfolge beginnt dem Produkt aus deinem Geburtstag, Geburtsmonat und Geburtsjahr. Ist die aktuelle Zahl gerade, wird sie halbiert ansonsten mit 3 multipliziert und 1 addiert. Die Folge ist zu Ende, wenn 1 erreicht ist. Beispiel: 20, 10, 5, 16, 8, 4, 2, 1. a) zahlenfolgeA.py gibt die Zahlenfolge aus. b) zahlenfolgeB.py gibt die größte vorkommende Zahl aus. 4. Das Programm rateDieZahl.py erzeugt durch die nachfolgenden Zeilen eine Zufallszahl zwischen 1 und 1000 from random import * z = randint(1,1000) Nun fordert es den Benutzer auf, die Zahl zu erraten und antwortet auf eine Eingabe mit: „Zu hoch“ oder „Zu niedrig“ solange bis es „Stimmt!“ Programmieren lernen mit Python 5. Das Programm rechentrainer.py erzeugt folgende Ausgabe aus dem großen 1mal1: Rechentrainer ============= Wie viele Aufgaben wünschen Sie? 2 Wie viel ist 3*13? 39 Richtig! Wie viel ist 8*17? 163 Leider daneben! Sie haben 50% der Aufgaben gelöst! 6. Das Programm summe.py ermöglicht so lange die Eingabe von Zahlen bis eine Null eingegeben wird. Ausgabe ist dann die Summe der eingegebenen Zahlen. 7. Gemeinhin ist davon auszugehen, dass alle PKW nach dem ersten Jahr nach Neuzulassung bei einer Fahrleistung von 15.000 Kilometern einen Wertverlust von 24,2% verzeichnen. Die folgenden Jahre schlagen jeweils mit etwa 5,5 % zu Buche. Das Programm wertverlust.py berechnet den Wert eines PKWs für die ersten 10 Jahre. Eingabe ist der Neupreis. Zusatzaufgaben 3 2 8. Für die Funktion f ( x)=x +4x −8x−10 existiert zwischen 2 und 3 eine Nullstelle. Das Programm nullstelle.py liefert die Lösung. 9. Das Programm minmax.py sucht das absolute Minium und Maximum der o.g. Funktion auf einem anzugebenden Intervall. Programmieren lernen mit Python Funktionen Funktionen sind eigenständige Programmteile und werden deshalb auch als Unterprogramme bezeichnet. An Funktionen können Variablen zur Verarbeitung übergeben werden. Funktionen können auch Ergebnisse an das aufrufende Programm zurückgegeben. Ein einfaches Beispiel: Die Funktion dreiecksflaeche soll den Flächeninhalt eines Dreiecks berechnen. Dazu wird die Länge der Grundseite und die Höhe des Dreiecks benötigt. In Python sieht die Definition einer Funktion so aus: def dreiecksflaeche(g, h): return 0.5*g*h Aufgerufen wird diese Funktion so: r = 5 s = 8 A = dreiecksflaeche(r, s) In diesem Fall wird die Variable A mit 20 beschrieben. Lokale und globale Variablen Innerhalb von Unterprogrammen existiert in der Regel ein eigenständiger Speicherbereich. Damit ist es möglich, Variablen zu verwenden, die nur während der Bearbeitung der Funktion existieren. Sie werden als lokale Variablen bezeichnet. Sie können die selben Namen haben wie die des Hauptprogramms. Die Änderung einer lokalen Variablen beeinflusst eine gleichnamige Variable im Hauptprogramm nicht. Zwar können Unterprogramme auch auf Variablen des Hauptprogramms zugreifen, wobei aber die Eigenständigkeit des Unterprogramms verloren geht. Deshalb wollen wir davon ohne zwingenden Grund keinen Gebrauch machen. Übergabeparameter In Python beginnt die Deklaration einer Funktion mit dem reservierten Wort def anschließend folgt der Funktionsname mit der Parameterliste (sie kann auch leer sein) in runden Klammern. Der Aufruf der Funktion erfolgt mit ihrem Namen mit den Parametern als Konstante oder Variablen des Hauptprogramms. Rückgabewerte Unterprogramme können (müssen aber nicht) Werte an das aufrufende Programm zurückgeben. Rückgabewerte stehen im Unterprogramm unmittelbar nach dem reservierten Wort return, dadurch wird eine sofortige Rückkehr zum aufrufenden Programm erzwungen. Rückgabewerte werden wie im Beispiel oben einer Variablen zugewiesen. Gültigkeitsbereich von Variablen Variablen des Hauptprogramms sind globale Variablen. Sie können in Funktionen benutzt werden. Wählt man gleiche Namen, wie im vorausgegangenen Programm die Variable i, wird ein neuer Speicherbereich angelegt, so dass die gleichnamige Variable des Hauptprogramms nicht berührt wird. Programmieren lernen mit Python Praxis Funktionen sind eine wertvolle Hilfe zur Lösung eines schwierigen Problems. Es lässt leichter lösen, wenn es gelingt daraus viele kleine Probleme zu machen. Unser großes Problem sei: „Gib alle Primzahlen zwischen 1 und 1000 aus.“ Dazu muss man wissen, dass eine Primzahl genau zwei Teiler hat. Da die 1 nur einen Teiler hat, ist die 1 keine Primzahl. • Erstes Teilproblem: „Bestimme die Anzahl der Teiler einer Zahl. Hier muss für jede Zahl, die kleiner oder gleich der vorgegebenen Zahl ist, überprüft werden, ob sie die vorgegebene Zahl teilt. • Zweites Teilproblem: Wann teilt eine Zahl a eine andere Zahl b? Dies lässt sich leicht durch den in Python vorhandenen Restoperator ermitteln: a teilt b, wenn b%a == 0. Zur besseren Strukturierung des Programms löst man Teilprobleme am besten durch das Hinzufügen von neuen Funktionen. Die Funktion ist_primzahl deutet im Namen schon an, dass man als Rückgabewert „ja“ oder „nein“ bzw. True oder False erwartet. Der Funktionskopf enthält das reservierte Wort def, den Namen der Funktion und die eingeklammerte Aufzählung der übergebenen Variablen und dem Doppelpunkt. Sobald das reservierte Wort return aufgerufen wird, erfolgt die Rückkehr zum aufrufenden Programmteil. Folgt auf return noch ein weiterer Ausdruck, so wird der aktuelle Wert dieses Ausdrucks zurückgegeben. Programmieren lernen mit Python Aufgaben In alle Programme sollen Funktionen eingebaut werden 1. Das Programm wertetabelle.py gibt eine Wertetabelle der Funktion 1 2 f ( x)= x −5 x+2 aus. 2 2. Das Programm quader.py fragt den Benutzer, ob es die Oberfläche, die Kantensumme oder das Volumen eines Quaders berechnen soll und führt den Wunsch aus. 3. Das Programm schaltjahr.py findet heraus, ob ein angegebenes Jahr nach 1582 ein Schaltjahr ist. Wird eine kleinere Jahreszahl angegeben lautest die Ausgabe: „Zu dieser Zeit war der Gregorianische Kalender noch nicht gültig!“ Ein Schaltjahr liegt vor, wenn eine Jahreszahl durch 4 teilbar ist, aber nicht, wenn sie durch 100 teilbar ist, aber wohl wenn sie durch 400 teilbar ist. (1900 war kein Schaltjahr, 2000 war eines) 4. Das Programm wochentage.py bestimmt für ein vorgegebenes Datum vom 1.1.2001 bis zum 31.12.2100 den Wochentag. (der 1.1.2001 war ein Montag, s. auch Aufgabe 3) 5. Das Programm quersumme.py ermittelt die Quersumme einer natürlichen Zahl. 6. Seit 1968 tragen die Lokomotiven der DB computerlesbare Fahrzeugnummern. Sie bestehen aus einer dreistelligen Baureihennummer, einer dreistelligen Ordnungsnummer und einer durch einen Bindestrich abgesetzten Prüfziffer. Das Programm pruefziffer.py berechnet für die angegebene Baureihen- und Ordnungnummer die passende Prüfziffer. Programmieren lernen mit Python Zeichnen mit Python Wie eine Schildkröte eine Spur im weichen Sand hinterlässt, zeichnet die Python-Schildkröte (Turtle) Linien auf den Bildschirm. Die Turtle kann sich um einen bestimmten Winkel nach links oder rechts drehen, vorwärts und rückwärts laufen und einiges mehr. Hier eine kurze Demo: Aufgaben Zeichne... 1. ein Quadrat mit der Seitenlänge 80. 2. ein regelmäßiges 3-, 5- , 6- und 8-Eck. 3. „Das Haus vom Nikolaus“. 4. zwei sich schneidende Strecken. 5. Ändere das nachfolgende Programm so, dass die Ausgabe ein 5-Eck-Ornament ist.