EINSTIEG IN DIE PROGRAMMIERUNG MIT PYTHON - MÄRZ 2022 - WIKITOLEARN ...
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Einstieg in die Programmierung mit Python 8. März 2022
This book is the result of a collaborative effort of a community of people like you, who believe that knowledge only grows if shared. We are waiting for you! Get in touch with the rest of the team by visiting http://join.wikitolearn.org You are free to copy, share, remix and reproduce this book, provided that you properly give credit to original authors and you give readers the same freedom you enjoy. Read the full terms at https://creativecommons.org/licenses/by-sa/3.0/
Inhaltsverzeichnis 1 Arbeitsblätter 1 1.1 Erstes Ziel - Primzahlen ausrechnen . . . . . . . . . . . . . . . . . 1 1.1.1 Einstieg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.2 Linux installieren . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.3 Arbeitsumgebung kennenlernen . . . . . . . . . . . . . . . 3 1.1.4 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.1.5 Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.1.6 Primzahlen-Programm . . . . . . . . . . . . . . . . . . . . 4 1.2 Software installieren . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.1 Neue Software installieren . . . . . . . . . . . . . . . . . . 5 1.2.2 Software mit YaST installieren (openSUSE) . . . . . . . . 6 1.2.3 Software mit der Kommandozeile installieren . . . . . . . . 8 1.2.4 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3 Tunneler anpassen . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.3.1 Quellcode holen und bauen . . . . . . . . . . . . . . . . . . 10 1.3.2 Programm analysieren und ändern . . . . . . . . . . . . . . 13 1.3.3 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.4 Tunneler anpassen 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.4.1 Voraussetzung . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.4.2 Debugging mit printf() . . . . . . . . . . . . . . . . . . . . 16 1.4.3 Die Funktion system() . . . . . . . . . . . . . . . . . . . . 17 1.4.4 Pixel-Schrift verkleinern . . . . . . . . . . . . . . . . . . . 17 1.4.5 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2 Programmier-Einstieg 20 2.1 Python interaktiv . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.2 Python-Code in Dateien . . . . . . . . . . . . . . . . . . . . . . . . 22 2.3 Rechnen und Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . 24
Inhaltsverzeichnis 3 / 86 2.4 grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3 FAQ 38 3.1 Die Kommandozeile . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.1.1 Kommandozeile starten . . . . . . . . . . . . . . . . . . . . 38 3.1.2 Yakuake installieren . . . . . . . . . . . . . . . . . . . . . . 39 3.1.3 Einstieg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.1.4 Dateien und Verzeichnisse . . . . . . . . . . . . . . . . . . 40 3.1.5 Erweitert . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.1.6 Bash-Fun . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.2 Aufgaben für Zwischendurch . . . . . . . . . . . . . . . . . . . . . 44 3.3 Weitere Fragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.3.1 Schriftarten finden und installieren . . . . . . . . . . . . . 45 3.3.2 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.3.3 Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4 Eigenes System 50 4.1 GNU,Linux installieren . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.1.1 In VirtualBox einbinden . . . . . . . . . . . . . . . . . . . 50 4.1.2 Auf USB-Stick . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.1.3 Auf eingebauter Festplatte . . . . . . . . . . . . . . . . . . 50 4.2 Software finden und installieren . . . . . . . . . . . . . . . . . . . . 51 4.2.1 Einstieg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.2.2 Weiteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.2.3 Befehlsübersicht . . . . . . . . . . . . . . . . . . . . . . . . 52 4.2.4 Spezial-Infos . . . . . . . . . . . . . . . . . . . . . . . . . . 52 4.3 Empfehlenswerte Programme . . . . . . . . . . . . . . . . . . . . . 57 4.3.1 Programme (in der AG) . . . . . . . . . . . . . . . . . . . 57 4.3.2 Programme (für zuhause) . . . . . . . . . . . . . . . . . . . 60 4.3.3 Spiele (nur ZUHAUSE) . . . . . . . . . . . . . . . . . . . . 61 4.4 Lokales Netzwerk 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.4.1 Firewall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.4.2 (im Aufbau) Desktop-Freigabe im Netzwerk . . . . . . . . 69 4.4.3 (im Aufbau) Heimnetzwerk . . . . . . . . . . . . . . . . . . 71 4.4.4 Nützliche Netzwerk-Tools . . . . . . . . . . . . . . . . . . . 71 5 Unsortiert 72 5.1 Buch-Empfehlungen . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Inhaltsverzeichnis 4 / 86 5.1.1 Themen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 5.2 Python3-Game-Programming . . . . . . . . . . . . . . . . . . . . . 74 5.2.1 Frameworks . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.2.2 Tutorials / Ideen . . . . . . . . . . . . . . . . . . . . . . . . 79 5.2.3 Andere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 5.2.4 Ideen für Spiele . . . . . . . . . . . . . . . . . . . . . . . . 81 5.3 Externe Materialien . . . . . . . . . . . . . . . . . . . . . . . . . . 81 5.3.1 Unsortierte Materialsammlungen . . . . . . . . . . . . . . . 81 6 Org_Meta 84 7 Text- und Bildquellen, Autoren und Lizenzen 85 7.1 Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 7.2 Bilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 7.3 Inhaltslizenz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Kapitel 1. Arbeitsblätter 1 / 86 Kapitel 1 Arbeitsblätter 1.1 Erstes Ziel - Primzahlen ausrechnen 1 ______________________________ 2 / Hey Tux , um was geht es hier \ 3 \ eigentlich ? / 4 ------------------------------ 5 \ ^__^ 6 \ (oo)\ _______ 7 (__)\ )\/\ 8 ||----w | 9 || || 10 ____________ 11 < 2 3 5 7... > 12 ------------ 13 \ 14 \ 15 .--. 16 |o_o | 17 |:_/ | 18 // \ \ 19 (| | ) 20 /'\_ _/`\ 21 \___)=( ___/ 22 23 _____ 24 < ??? > 25 ----- 26 \ ^__^ 27 \ (xx)\ _______ 28 (__)\ )\/\ 29 ||----w | 30 || || 31 _________________________________________
Kapitel 1. Arbeitsblätter 2 / 86 32 / ...11 13 17... Primzahlen . Aber \ 33 | Achtung : der Pfad zu den Primzahlen ist | 34 | etwas verschlungen , da wir sehr viel | 35 \ neues kennenlernen werden . / 36 ----------------------------------------- 37 \ 38 \ 39 .--. 40 |o_o | 41 |:_/ | 42 // \ \ 43 (| | ) 44 /'\_ _/`\ 45 \___)=( ___/ 46 47 _____________ 48 < Los geht 's! > 49 ------------- 50 \ ^__^ 51 \ (oo)\ _______ 52 (__)\ )\/\ 53 ||----w | 54 || || 1.1.1 Einstieg Lese dir folgende Abschnitte der Reihe nach durch: • Programmier-Einstieg/Überblick • Programmier-Einstieg/Initialisierung • Programmier-Einstieg/Der_Computer Lehrer: Ziel-Programm vorführen: https://github.com/feinstaub/tp64/blob/master/ sample-code/prim-demo.py 1.1.2 Linux installieren • Sorge dafür, dass du openSUSE Linux verfügbar hast. Z. B. indem du es auf einen USB-Stick installierst. Frage dazu jemanden, der es schon gemacht hat, ob er dir hilft. Hinweise: • Linux auf einen USB-Stick installieren: http://feinstaub.github.io/arbeitsblatt. net/arbeitsblatt-linux-stick.html
Kapitel 1. Arbeitsblätter 3 / 86 • Linux mit VirtualBox ausführen: http://feinstaub.github.io/arbeitsblatt. net/arbeitsblatt-linux-image-virtualbox.html • Falls aus bestimmten Gründen die Installation heute nicht möglich ist (z. B. kein passender Stick dabei), dann mache folgendes: • Lese dir folgendes durch https://py-tutorial-de.readthedocs.io/de/python-3. 3/introduction.html und probiere den Python-Code aus, indem du die- se Python-Online-Shell verwendest: https://repl.it/languages/python3 • Bekannte Probleme: • Was ist eine Fließkommazahl? –> Das ist noch nicht wichtig zu wissen; bei Interesse siehe Wikipedia. • Der Unterstrich (_) funktioniert bei mir nicht. –> Die Online- Konsole scheint das nicht zu unterstützen. In diesem Fall über- springen. • Der Abschnitt zu “komplexen Zahlen” ist unverständlich. –> Wenn du noch nicht gelernt hast, was komplexe Zahlen sind, dann bitte überspringen. • Falls du damit fertig bist oder nicht weiterkommst • suche dir etwas von folgender Seite aus: Aufgaben für Zwischendurch • Bearbeite das Arbeitsblatt zu Binärzahlen: Course:Einstieg in die Pro- grammierung mit Python/Arbeitsblätter/Binäres Zahlensystem • Schülerfragen: Was ist der Vorteil von Linux? Was macht es aus? 1.1.3 Arbeitsumgebung kennenlernen Neue Software installieren Mache dich damit vertraut, wie man neue Software installiert. • Öffne dazu FAQ/Software installieren und arbeite Punkt 1 und 2 durch. Die UNIX-Shell bash Arbeite folgendes durch: • FAQ/Die Kommandozeile (bis Abschnitt 1.4) BONUS-Aufgabe: Mit der Shell kann man sehr viel machen, wenn man weiß wie. Siehe z. B. • http://feinstaub.github.io/arbeitsblatt.net/arbeitsblatt-cowsay-fortune.html
Kapitel 1. Arbeitsblätter 4 / 86 1.1.4 Python Interaktive Python-Shell • Arbeite folgendes durch: Python interaktiv Größere Programme mit Texteditor • Arbeite folgendes durch: py-Dateien Programmierkonzepte • Arbeite folgendes durch: Rechnen / Schleifen • BONUS-Aufgabe: Das grep-Tool: Programmier-Einstieg/grep 1.1.5 Algorithmus Überlege zusammen mit deiner Gruppe einen Algorithmus (also eine schriftliche Vorgehensweise), der Primzahlen (2, 3, 5, 7, 11, 13, 17, ...) ausgibt. Also wie würde man systematisch herausfinden, welche der natürlichen Zahlen (ab 2) Primzahlen sind? Führe deinen Algorithmus für die ersten 7 Primzahlen per Hand durch. Hilfestellungen (immer einen Punkt weiterlesen, wenn du nicht weiterkommst): 1) Überlege dir, mit welchen Schritten du für eine beliebige Zahl (z. B. 15 oder 17) herausfinden würdest, ob es eine Primzahl ist oder nicht. 2) Erinnere dich, was eine Primzahl ausmacht (nur durch 1 und sich selbst teilbar). 3) Was wäre, wenn du nun für eine gegebene Zahl schaust, ob es eine Zahl zwischen 2 und gibt, durch die die Zahl teilbar ist? Ist es dann eine Primzahl oder nicht? 4) Wenn du die Vorgehensweise für eine beliebige Zahl hast, dann kannst du sie auf alle natürlichen Zahlen der Reihe nach anwenden. 1.1.6 Primzahlen-Programm Du hast nun folgende Programmierkonzepte und Python-Sprachelemente kennen- gelernt: • Variable (z. B. a) • Zuweisung (z. B. a = 5) • print-Ausgabe • Vergleichsoperatoren (z. B. a < 5) • if-Anweisung
Kapitel 1. Arbeitsblätter 5 / 86 • while-Schleife Versuche nun den den Primzahlen-Algorithmus aus dem vorigen Schritt in ein Python-Programm umzusetzen. Gebe auch die Nummer der Primzahl aus. Die Ausgabe für die ersten 10 Primzahlen sieht so aus: 1 1: 2 2 2: 3 3 3: 5 4 4: 7 5 5: 11 6 6: 13 7 7: 17 8 8: 19 9 9: 23 10 10: 29 Bonus mit grep 1. Nutze grep (mit dem Pipe-Symbol), um zu bestätigen, dass die Zahl 676763 eine Primzahl ist. 2. Ist die Zahl 676767 auch eine Primzahl? 3. Suche nach der einemillionsten Primzahl. Ergebnis innerhalb der Gruppe vergleichen • Schreibe dein Programm so um, dass es bei Primzahlen größer als 1.000.000 mit der Berechnung aufhört. • Leite das Ergebnis in die Datei prim_.txt um. • Kopiere die Ergebnisdatei deines Teamkollegen auf deinen Rechner. • Verwende das Programm KDiff3 oder Kompare, um festzustellen, ob bei- de Dateien gleich sind. 1.2 Software installieren 1.2.1 Neue Software installieren 1 _______________________________________ 2 / Muh. Wie wird unter openSUSE Linux \ 3 \ eigentlich neue Software installiert ? / 4 --------------------------------------- 5 \ ^__^ 6 \ (oo)\ _______ 7 (__)\ )\/\ 8 ||----w |
Kapitel 1. Arbeitsblätter 6 / 86 9 || || 10 _________________________________________ 11 / Das steht auf dieser Seite . Und du bist \ 12 \ auch dabei ... / 13 ----------------------------------------- 14 \ 15 \ 16 .--. 17 |o_o | 18 |:_/ | 19 // \ \ 20 (| | ) 21 /'\_ _/`\ 22 \___)=( ___/ 23 24 _______ 25 < Kuul. > 26 ------- 27 \ ^__^ 28 \ (oo)\ _______ 29 (__)\ )\/\ 30 ||----w | 31 || || 1.2.2 Software mit YaST installieren (openSUSE) Hintergrund YaST ist die Abkürzung für “Yet another Setup Tool” (“Noch ein Administrati- onswerkzeug”). Es wird für Administrationszwecke unter openSUSE Linux ver- wendet. Es enthält unter anderem ein Modul zum Installieren und Deinstallieren von Software. Schritt für Schritt Aufgabe 1: Neue Software mit YaST installieren Funktioniert mit: open- SUSE (13.2), 42.1, 42.2 Ziel: Texteditor ’kate’ installieren • YaST aus dem K-Menü aufrufen. • Es öffnet sich ein Passwort-Fenster. Dort das root-Passwort eingeben. Was ist das?
Kapitel 1. Arbeitsblätter 7 / 86 • “Software installieren oder löschen” [DE] bzw. “Software Management” [EN] anklicken. • Reiter “Suchen” auswählen. • “kate” eintippen. • “Suchen”-Knopf drücken. • Eintrag in der Liste rechts finden, der unter der Spalte “Paket” den Namen “kate” hat. • In das leere Quadrat ein Häkchen klicken (alternativ: rechte Maustaste -> “Installieren” klicken). • Reiter “Installationsübersicht” auswählen und ansehen, was tatsächlich in- stalliert werden wird. • ”Übernehmen”-Knopf drücken (unten rechts). • (kate wird heruntergeladen und installiert) • “Beenden”-Knopf unten rechts drücken. • Um zu prüfen, ob die Installation tatsächlich erfolgreich war: • kate im K-Menü finden und starten. • kate wieder schließen. Aufgabe 2: Software deinstallieren Ziel: Texteditor ’kate’ wieder deinstal- lieren • YaST-Modul “Software-Management” aufrufen. • Entweder wie in Aufgabe 2 • oder alternativ: • Alt+Leertaste (oder mit KDE/Plasma-Version < 5: Alt+F2) drücken. • “Software” eintippen. • “Software Management” mit den Cursor-Tasten auswählen und ENTER-Taste drücken. • Reiter “Suchen” auswählen. • “kate” eintippen. • Eintrag in der Paket-Liste so lange anklicken, bis ein X erscheint (oder die rechte Maustaste verwenden). • ”Übernehmen”-Knopf drücken. • (kate wird deinstalliert)
Kapitel 1. Arbeitsblätter 8 / 86 Aufgabe 3: Mehrere Programme auf einmal installieren • YaST-Modul “Software-Management” aufrufen. • Im Reiter “Suchen” “kate” eintippen und in der Paketliste abhaken. • Im Reiter “Suchen” “chess” eintippen und in der Paketsliste den Eintrag “gnome-chess” abhaken. • ”Übernehmen”-Knopf drücken. • (beide Programme werden installiert) • ’Chess’ (ein Schachprogramm) ausprobieren (Alt+Leertaste, “Chess”) 1.2.3 Software mit der Kommandozeile installieren Ein Paket installieren Ziel: Das Programm cowsay mit Hilfe des Tools zypper installieren. • Das Programm “Konsole” öffnen (z. B. via K-Menü oder Alt+Leertaste, siehe auch FAQ/Die Kommandozeile. • cowsay Muh eingeben und ENTER drücken. • Befehl nicht gefunden. • cnf cowsay eingeben. • Die Ausgabe sagt, was zu tun ist, um das (noch) nicht vorhandene Programm zu installieren. • sudo zypper install cowsay eingeben. • Nach Rückfragen wird cowsay installiert. • cowsay Muh eingeben. Das sollte das Ergebnis sein: 1_____ 2< Muh > 3 ----- 4 \ ^__^ 5 \ (oo)\ _______ 6 (__)\ )\/\ 7 ||----w | 8 || || • Aufgabe: cowsay Hallo Welt eingeben. 1.2.4 Ausblick • Siehe Eigenes System/Software finden und installieren
Kapitel 1. Arbeitsblätter 9 / 86 1.3 Tunneler anpassen Ziel: Lernen wie vorhandene Programme an eigene Bedürfnisse angepasst werden können. 1 _______________________________ 2 < Und nun zum Tunneler - Spiel ... > 3 ------------------------------- 4 \ 5 \ 6 .--. 7 |o_o | 8 |:_/ | 9 // \ \ 10 (| | ) 11 /'\_ _/`\ 12 \___)=( ___/ 13 14 ______________ 15 < Sehr schön . > 16 -------------- 17 \ ^__^ 18 \ (oo)\ _______ 19 (__)\ )\/\ 20 ||----w | 21 || || 22 _________________________________________ 23 / Das Original - Tunneler wurde in Turbo \ 24 | Pascal programmiert und war auf DOS | 25 | beliebt . Es wurde von Taneli Kalvas aus | 26 | Finnland im Jahr 2003 mit der | 27 | Cross -Platform - Bibliothek SDL in der | 28 \ Sprache C nachprogrammiert . / 29 ----------------------------------------- 30 \ 31 \ 32 .--. 33 |o_o | 34 |:_/ | 35 // \ \ 36 (| | ) 37 /'\_ _/`\ 38 \___)=( ___/ 39 40 ____________ 41 < Und jetzt ? > 42 ------------ 43 \ ^__^ 44 \ (oo)\ _______ 45 (__)\ )\/\
Kapitel 1. Arbeitsblätter 10 / 86 46 ||----w | 47 || || 48 ________________________________________ 49 / Wir holen uns den freien Quellcode und \ 50 | machen unsere eigenen Änderungen an | 51 \ dem Programm . / 52 ---------------------------------------- 53 \ 54 \ 55 .--. 56 |o_o | 57 |:_/ | 58 // \ \ 59 (| | ) 60 /'\_ _/`\ 61 \___)=( ___/ 1.3.1 Quellcode holen und bauen Quellcode-Paket holen Erst schauen wir, was es für Pakete gibt, die den Namen “tunneler” enthalten. 1 $ zypper se tunneler Ausgabe: 1 Loading repository data ... 2 Reading installed packages ... 3 4 S | Name | Summary | Type 5 --+----------+----------------------------------+----------- 6 i | tunneler | Clone of legendary Tunneler game | package 7 | tunneler | Clone of legendary Tunneler game | srcpackage Das “i” in der ersten Spalte bedeutet, dass das Paket “tunneler” installiert ist. Das Paket in der zweiten Zeile ist das Quell-Paket, siehe “Type” in der letzten Spalte (merkwürdig: auch wenn man das Paket im nächsten Schritt installiert, erscheint kein “i” in der ersten Spalte). Das Quellpaket installieren wird in zwei Schritten mit der source-install-Option: 1) Abhängigkeiten installieren 1 $ sudo zypper source - install tunneler 2) Quell-Code ins eigene Home-Verzeichnis kopieren: 1 $ zypper source - install tunneler
Kapitel 1. Arbeitsblätter 11 / 86 Die mit source-install geholten Quellpakete befinden sich dann hier: ~/rpmbuil- d/SOURCES/ Der Quellcode von Tunneler ist in dieser Datei: tunneler-1.1.1.tar.bz2 (Versi- onsnummer kann abweichen) Die Datei ist ein Archiv und muss erst entpackt werden, damit wir weiterarbeiten können. Das machen wir im nächsten Abschnitt. Quellcode-Archiv entpacken Die im Verzeichnis ~/rpmbuild/SOURCES/ befindliche Datei tunneler-1.1.1.tar.bz2 enthält die Quellcode-Dateien, die mit bz2 komprimiert gepackt sind. Diese müs- sen erst entpackt werden. Erst ins richtige Verzeichnis wechseln: 1 $ cd ~/ rpmbuild / SOURCES / (Die meisten Fehler passieren, wenn man nicht im richtigen Verzeichnis ist. Das Verzeichnis sieht man links neben dem Prompt oder man fragt es mit dem Befehl pwd ab.) Schauen, ob die Datei da ist: 1 ~/ rpmbuild /SOURCES > ls -l 2 total 784 3 -rw -r--r-- 1 gregor users 78228 Aug 14 2009 tunneler -1.1.1. tar.bz2 4 -rw -r--r-- 1 gregor users 154 Aug 14 2009 tunneler . desktop 5 -rw -r--r-- 1 gregor users 4675 Aug 14 2009 tunneler .svg Entpacken: 1 $ tar xvjf tunneler -1.1.1. tar.bz2 Ein neuer Ordner “tunneler-1.1.1” wurde erstellt. Inhalt zur Kontrolle auflisten. 1) Sind wir noch im richtigen Verzeichnis? 1 $ pwd 2 /home// rpmbuild / SOURCES / 2) Auflisten: 1 $ cd tunneler -1.1.1 2 $ ls -l 3 4 -rwxr -xr -x 1 6404 Jun 3 2007 acinclude .m4 5 -rw -r--r-- 1 31565 Jun 5 2008 aclocal .m4 6 -rw -r--r-- 1 0 Jun 3 2007 AUTHORS 7 -rw -r--r-- 1 0 Jun 3 2007 ChangeLog 8 -rwxr -xr -x 1 142434 Jun 5 2008 configure 9 -rw -r--r-- 1 444 Jun 5 2008 configure .in
Kapitel 1. Arbeitsblätter 12 / 86 10 -rw -r--r-- 1 15119 Jun 3 2007 COPYING 11 -rwxr -xr -x 1 17574 Sep 24 2007 depcomp 12 -rw -r--r-- 1 9416 Sep 24 2007 INSTALL 13 -rwxr -xr -x 1 13184 Sep 24 2007 install -sh 14 -rw -r--r-- 1 14 Jun 3 2007 Makefile .am 15 -rw -r--r-- 1 17567 Jun 5 2008 Makefile .in 16 -rwxr -xr -x 1 11135 Sep 24 2007 missing 17 -rw -r--r-- 1 0 Jun 3 2007 NEWS 18 -rw -r--r-- 1 2840 Jun 5 2008 README 19 drwxr -xr -x 2 4096 Jun 5 2008 src Quellcode kopieren Wir fangen in den nächsten Abschnitten an, die Quellcode-Dateien zu modifi- zieren. Damit wir im Nachhinein besser vergleichen können, was im Vergleich geändert wurde, fertigen wir eine Kopie des Quellcode-Ordners an. 1. Den Ordner “tunneler-1.1.1” umbenennen in “tunneler-2”: 1 $ cd ~/ rpmbuild / SOURCES / 2 $ mv tunneler -1.1.1 tunneler -2 2. Das Quellcode-Archiv nochmal entpacken: 1 $ tar xvjf tunneler -1.1.1. tar.bz2 Wir haben jetzt zwei Ordner mit demselben Inhalt. Den “tunneler-1.1.1” lassen wir so, wie er ist. Im Folgenden arbeiten wir in “tunneler-2”. (Die Vorgehensweise bis hierhin ist für jedes openSUSE-Paket ähnlich durchzu- führen.) Vorbereiten des Bauens Bevor aus dem Quellcode eine ausführbare Datei gebaut werden kann, muss die Umgebung initialisiert werden. Das machen wir mit den folgenden Befehlen: 1 $ pwd 2 /home// rpmbuild / SOURCES 3 $ cd tunneler -2/ 4 $ export LIBS=-lm 5 $ ./ configure Erinnerung: Die Zeilen, die mit einem $ anfangen sind die Befehle, die ohne das $-Zeichen nach der Reihe abgetippt werden sollten. Bestätigung jeweils mit der Entertaste. Nach jedem Befehl ist die Konsolenausgabe zu prüfen, ob das Ergeb- nis ohne Fehlermeldungen ablief, ansonsten funktionieren die nächsten Befehle möglicherweise nicht richtig. Was haben wir damit gemacht?
Kapitel 1. Arbeitsblätter 13 / 86 1) Schauen, ob wir im richtigen Verzeichnis sind. 2) Ins tunneler-2-Verzeichnis wechseln. 3) Eine notwendige Option setzen (warum? –> siehe hier). 4) Projekt einmalig “konfigurieren”. (Die Vorgehensweise bis hierhin ist für eine bestimmte Menge von Programmen - die, die die GNU autotools verwenden - ähnlich) Projekt bauen und ausführen 1 $ pwd 2 /home// rpmbuild / SOURCES /tunneler -2 3 $ cd src 4 $ make 5 $ ./ tunneler Mit dem ersten Schritt wechseln wir in den src-Ordner. Der make-Befehl startet die Kompilierung, denn da Tunneler ist in der Program- miersprache C geschrieben ist, muss der Quellcode erst kompiliert werden. Den Prozess nennt man allgemein “Bauen”. Unter “Bauen” kann man aber auch das Programmieren einer Software an sich verstehen. Mit dem letzten Befehl wird die Datei tunneler, die durch den erstmaligen make- Aufruf erzeugt wurde, ausgeführt: Das Spiel startet. :-) 1.3.2 Programm analysieren und ändern Wir arbeiten in folgendem Verzeichnis: ~/rpmbuild/SOURCES/tunneler- 2/src/ Titel ändern Wir machen nun unsere erste Änderung am Programm. Öffne die Datei main.c mit Kate. Suche nach der Zeile “PutStr( 18, 20, “Tunneler v.” VERSION, color[12] );” Tipp: Zeile 1014 (Erinnerung: mit F11 blendet man die Zeilennummerierung in Kate ein) Tipp: mit Strg+G springt man in eine Zeile Tipp: mit Strg+F sucht man in der Datei. Die Code-Zeile sorgt dafür, dass auf dem Startbildschirm der Name des Spiels und seine Version angezeigt wird. Damit wir unser geändertes Programm vom Original unterscheiden können, mache folgendes: Ändere die Zeile von vorher: 1 PutStr ( 18, 20, " Tunneler v." VERSION , color [12] );
Kapitel 1. Arbeitsblätter 14 / 86 auf nachher: 1 PutStr ( 5, 20, ">> Tunneler 2.0
Kapitel 1. Arbeitsblätter 15 / 86 Aufgabe 1) Ändere die Farbe des linken Spielers (inklusive der Umrahmung des Startfeldes) in gelb. Finde dazu heraus, welche Code-Zeilen für welche Teil- farbe verantwortlich sind. 2) Ändere die Farbe des rechten Spielers in weiß. Geschwindigkeit ändern • game.h öffnen • Suche nach: • #define TANK_SPEED 130.0 • #define DIG_SPEED 60.0 Englische Vokablen • tank = Panzer • speed = Geschwindigkeit • dig = graben => Je mehr englische Vokabeln du kannst, umso einfacher ist es, Quellcode zu verstehen! Ansonsten kann man englische Wörter online unter http://dict.leo.org nachschla- gen. Oder besser offline mit KDing (Paket kding installieren, starten, danach Tastenkombination Meta+Umschalt+T verwenden). Aufgabe • Vertausche die beiden Zahlen für TANK_SPEED und DIG_SPEED. • Kompilieren, starten und ausprobieren: 1 $ make && ./ tunneler Wie verhält sich der Panzer nun? Versuche den eigenen Kugeln davonzufahren. Änderungen und Original vergleichen Da du nun einige Änderungen am Code gemacht hast, ist es gut zu sehen, was eigentlich alles im Vergleich zum Original geändert wurde. Dies kannst du damit machen: 1 $ cd ~/ rpmbuild / SOURCES / 2 $ kdiff3 tunneler -1.1.1 tunneler -2 (todo: mehr erklären; disable whitespace)
Kapitel 1. Arbeitsblätter 16 / 86 1.3.3 Ausblick Weitere Ideen • Selber den Code weiter analysieren und Änderungen vornehmen. • Die Texte vom Englischen ins Deutsche übersetzen. • Schriftart verkleinern, damit mehr Text hinpasst. • AI-Namen vergeben (Parameter -ai 1 um -ainame “Name1” erweitern) • Per Tastendruck die Kartenübersicht einblenden • Die Geschwindigkeit des Gefährts mittels Programmparameter einstel- len. • Die Geschwindigkeit des Gefährts mittels Sondertaste erhöhen und er- niedrigen. Nächste Schritte Weiter mit Teil 2. 1.4 Tunneler anpassen 2 1.4.1 Voraussetzung Voraussetzung für dieses Arbeitsblatt ist das erfolgreiche link removed. Nachtrag: Entpacken Alternativ kann man ein Archiv auch mit graphischen Tools entpacken: 1. Verzeichnis ~/rpmbuild/SOURCES/ mit Dolphin öffnen 2. Rechte Maustaste auf tunneler-1.1.1.tar.bz2 -> Extract -> Extract archive here, autodetect subfolder 1.4.2 Debugging mit printf() main.c: - Achte auf die erste geschweifte Klammer auf und die letzte geschweifte Klammer zu. 1 int main( int argc , char *argv [] ) 2 { 3 printf (" main start \n"); 4 ... 5 printf (" main end\n"); 6 }
Kapitel 1. Arbeitsblätter 17 / 86 1.4.3 Die Funktion system() main.c: 1 printf (" main start \n"); 2 system (" cowsay 'Tunneler startet ! '"); 3 system (" notify -send 'Tunneler startet ! '"); 4 system (" bash -c 'play /usr/ share /tong/ media /tick.ogg &'"); 5 system (" bash -c 'play /usr/ share / alienarena / data1 / sound/ music /dm - saucer .ogg & '"); tunneler.c: 1 /* Make new ammo */ 2 if( Tank[i]. fire && Time_Now () - Tank[i]. last > FIRE_DELAY && Tank[i]. deathc
Kapitel 1. Arbeitsblätter 18 / 86 25 for( i = 0; i < 8; i++ ) { 26 for( j = 0; j < 8; j++ ) { 27 if( font8x8 [j][i][( int)ch] ) 28 PutPixel_1 ( x + j, y + i, color , 2 ); 29 } 30 } 31 } 1.4.5 Ausblick Weitere Ideen • system-Aufrufe • espeak • xcowsay • tunneler.c: 1 /* Death */ 2 int is_dead = 0; 3 if( Tank[i]. Shields
Kapitel 1. Arbeitsblätter 19 / 86 27 sprintf (cmd , "bash -c 'xcowsay \" Spieler %d hat das Zeitliche gesegnet .\ nPunktestand :\ nlinks =%d, rechts =%d\"' &", i, Tank [0]. deaths , Tank [1]. deaths ); 28 system (cmd); 29 } • Nachdem die Auflösung der Schrift vergrößert wurde: • Längere Texte möglich • Spielernamen als Parameter übergeben und in den Settings an- stelle von “Tank 1” und “Tank 2” verwenden. • Programmiere dein eigenes Tunneler-Spiel mit Python und Qt. Die Sprache C Bücher • Lerne C programmieren auf Wikibooks: https://de.wikibooks.org/wiki/C-Programmierung • Lerne C programmieren: https://www.proggen.org/doku.php?id=c:start C-Strings • Am besten (ähnlich wie bei Datenbanken) schon vorher festlegen wie lange der String maximal sein soll. • siehe “Nullterminiert”: http://www.c-howto.de/tutorial-strings-zeichenketten-nullterminier html • Länge • Kopieren • Variable length string in Blöcken: https://de.wikipedia.org/wiki/Variable_ Length_Array Die Bibliothek SDL • Einstieg in SDL auf proggen.org IDEs • kdevelop: Funktioniert auf Anhieb; todo: beschreiben • Code::Blocks: ein vorhandenes Projekt zu importieren, ging nicht auf An- hieb
Kapitel 2. Programmier-Einstieg 20 / 86 Kapitel 2 Programmier-Einstieg 2.1 Python interaktiv Dieser Abschnitt erklärt den Umgang mit der Python-Shell, dem Kate-Editor und dem Konsolen-Suchtool grep. Den Computer rechnen lassen 1. Öffne eine Bash-Shell indem du das Programm konsole startest (mehr In- fos dazu: https://de.wikipedia.org/wiki/Bash_(Shell), https://de.wikipedia.org/ wiki/Konsole_(KDE), TIPP: https://de.wikipedia.org/wiki/Yakuake). 1 gregor@linux -85 rg :~/ dev/ag > 2. Gebe python3 und drücke ENTER. 1 gregor@linux -85 rg :~/ dev/ag > python3 2 Python 3.4.5 (default , Jul 03 2016 , 13:32:18) [GCC] on linux 3 Type "help", " copyright ", " credits " or " license " for more information . 4 >>> Du bist nun in der Python3-Shell. 3. Drücke Strg+D und du bist wieder draußen. 4. Drücke nochmal Strg+D und damit ist auch die Bash-Shell beendet. 5. Wiederhole nun Schritt 1. und 2., aber überspringe Schritt 3. und 4. :-) 6. Gebe 100 + 50 ein und drücke ENTER. Das Plus-Zeichen (+) nennt man Operator. Übung 1. Probiere die 4 Grundrechenarten aus. Die Operatoren dazu sind + (plus), - (minus), * (Multiplikation), / (Division) 2. Probiere Multiplikation mit großen, sehr großen und irrsinnig großen Zahlen aus. Wie schnell ist der Computer im Vergleich zum Ausrechnen per Hand?
Kapitel 2. Programmier-Einstieg 21 / 86 3. Du kannst auch Potenzieren. Der Operator ist **. Berechne 2 hoch 4, 2 hoch 10, 2 hoch 1000 und 2 hoch 1.000.000. TIPP: Wenn eine Berechnung zu lange dauert und du das Programm abbrechen möchtest, drücke Strg+C. Variablen, Ausgabe Gebe folgendes selber der Reihe nach in die Python ein: 1 >>> a = 5 2 >>> b = 6 3 >>> print (a + b) 4 11 5 >>> c = a + 3 * b 6 >>> print (c) 7 23 8 >>> c = 10 9 >>> print (c) 10 10 11 >>> Folgendes ist neu: • Neue Variable definieren und einen Wert zuweisen. • Mit Variablen rechnen • Die Ausgabe-Funktion print • Das Ergebnis einer Berechnung in einer Variablen speichern. • Einer vorhandenen Variablen einen neuen Wert zuweisen. Vergleichen Gebe folgendes selber der Reihe nach in die Python ein 1 >>> a = 5 2 >>> b = 7 3 >>> a > b 4 False 5 >>> a < b 6 True 7 >>> a >= 5 8 True 9 >>> a > 5 10 False 11 >>> a == b 12 False 13 >>> a + 2 == b 14 True
Kapitel 2. Programmier-Einstieg 22 / 86 15 >>> a != b 16 True 17 >>> Das Ergebnis eines Vergleichsoperators ist entweder True oder False. Der Operator ist übrigens binär, weil er mit zwei Ausdrücken arbeitet; ein Aus- druck kann eine Zahl, eine Variable oder auch etwas kompliziertes sein. Folgende Vergleichsoperatoren gibt es: 1 < 2 > 3 = 5 == 6 != Übung Überlege dir vorher, was das Ergebnis der folgenden Ausdrücke ist, bevor du sie zur Kontrolle in Python eingibt: 1 >>> a = 5 2 >>> b = 7 3 4 a < b 5 a
Kapitel 2. Programmier-Einstieg 23 / 86 Damit du die grundlegenden Funktionen des Kate-Editors kennenlernst, lese dir folgendes durch: • Kate-Tipps (bis einschließlich Abschnitt 1.3) Programmtext eingeben Ein einfaches Python-Programm sieht so aus: 1 #!/ usr/bin/ python3 2 3 print (" Hallo Welt ") Wenn Umlaute (ä, ö, ü usw.) korrekt dargestellt werden sollen, dann sieht es so aus: 1 #!/ usr/bin/ python3 2 # -*- coding : utf -8 -*- 3 4 print (" Hallo Welt ") • Starte Kate. • Tippe den obigen Text ab (für den Anfang reicht die erste Variante). • Der Text befindet sich nun in einem ungespeicherten Dokument. Dies er- kennt man man dem Sternchen oben in der Titelleiste rechts neben dem Dokumentnamen. Datei speichern • Drücke Strg+S oder wähle im Menü Datei den Punkt Speichern. • Das Speichern-Dialog öffnet sich. • Wechsle in den Ordner ~/ag • Die Tilde (~) steht für das persönliche Verzeichnis des eingloggten Benutzers • Der Unterordner ag ist möglicherweise noch nicht vorhanden. Erstelle ihn mit dem entsprechenden Knopf im Speichern-Dialog • Wähle einen Dateiname (Textfeld unten): hallo.py. • Achte darauf, dass du keine Leerzeichen am Anfang oder am Ende einfügst • Beim Programmieren ist es empfehlenswert, die Dateinamen immer klein zu schreiben und anstelle von Leerzeichen Bindestriche (-) oder Unterstriche (_) zu verwenden. • Drücke den Speichern-Knopf.
Kapitel 2. Programmier-Einstieg 24 / 86 In die Kommandozeile wechseln • Starte eine Bash-Kommandozeile. • Wechsle in das Verzeichnis, in das du im vorigen Schritt die py-Datei ge- speichert hast. • Verwende dazu den Befehl cd und ls. Wie das geht, lernst du hier: Dateien_und_Verzeichnisse Programm mit python ausführen Führe das Programm aus, indem du folgendes auf der Konsole eingibst (Erinnerung: das $-Zeichen wird nicht mit eingegeben): 1 $ python3 hallo .py Programm ausführbar machen Die Python-Datei wird mit folgendem Be- fehl (einmalig) ausführbar gemacht: 1 $ chmod +x hallo .py Programm ausführen Nun kannst du das Programm auch ausführen, ohne python3 davorzuschreiben, weil der python-Befehl schon in der ersten Zeile deiner Datei steht (#!/usr/bin/python3): 1 $ ./ hallo.py Bitte beachte das ”./” am Anfang. Damit sagt man dem System, es soll die Datei im aktuellen Verzeichnis ausführen und nicht in den Systempfaden (siehe echo $PATH) suchen. Fehler korrigieren Wenn das Programm fehlerhaft ist, dann gehe zurück zum Kate-Editor und versuche den Fehler zu finden und zu korrigieren. Nächste Schritte Programmier-Einstieg/Rechnen / Schleifen 2.3 Rechnen und Schleifen 1 ______________________________ 2 < Hey Tux , was lerne ich hier? > 3 ------------------------------ 4 \ ^__^ 5 \ (oo)\ _______ 6 (__)\ )\/\ 7 ||----w |
Kapitel 2. Programmier-Einstieg 25 / 86 8 || || 9 ________________________________________ 10 / Hier geht es um grundlegende \ 11 | Programmierkonzepte . Vor allem die | 12 | Schleife hat es in sich. Wenn du alles | 13 | durchgearbeitet hast , sollte das aber | 14 \ kein Problem mehr für dich sein. / 15 ---------------------------------------- 16 \ 17 \ 18 .--. 19 |o_o | 20 |:_/ | 21 // \ \ 22 (| | ) 23 /'\_ _/`\ 24 \___)=( ___/ 25 26 _______ 27 < Kuhl. > 28 ------- 29 \ ^__^ 30 \ (oo)\ _______ 31 (__)\ )\/\ 32 ||----w | 33 || || Variablen und Rechnen Tippe folgendes in den kate-Editor: 1 #!/ usr/bin/ python3 2 3 a = 2 4 print (a) 5 6 a = a + 5 7 print (a) 8 9 b = 20 10 c = a + b 11 print (c)
Kapitel 2. Programmier-Einstieg 26 / 86 Speichere es in eine Datei rechnen.py. Wechsle zur Kommandozeile, mache die Datei ausführbar und führe die Datei aus. Ausgabe mit format Wie zuvor: Programmcode abtippen, in eine Datei speichern (entweder die gleiche oder eine neue: format.py), ausführbar machen und ausführen. 1 #!/ usr/bin/ python3 2 3 a = 1234 4 b = 4 5 print ("a geteilt durch b = {}". format (a / b)) 6 print ("{} geteilt durch {} = {}". format (a, b, a / b)) Verstehst du wie der format-Befehl arbeitet? Zählen für Anfänger Wir zählen bis 5: 1 #!/ usr/bin/ python3 2 3 a = 0 4 print (a) 5 6 a = a + 1 7 print (a) 8 9 a = a + 1 10 print (a) 11 12 a += 1 # += ist eine Abkürzung für a = a + 1 13 print (a) 14 15 a += 1 16 print (a) 17 18 a += 1 19 print (a) Aufgabe: Zähle auf diese Weise bis 50 (Tipp: die Befehle mit kate oft untereinander kopieren, Datei speichern und Pro- gramm auf der Konsole ausführen.)
Kapitel 2. Programmier-Einstieg 27 / 86 Lass den Computer zählen mit einer Schleife Nun lassen wir den Computer zählen und schauen zu wie schnell er ist. Dazu verwenden wir eine Schleife. 1 #!/ usr/bin/ python3 2 3 i = 0 4 while (True): 5 print (i) 6 i += 1 Du kannst das Programm mit Strg+C unterbrechen. Vorzeitiges Ende mit der if-Anweisung und break Damit der Computer nicht zu viel rechnet und wir sehen, was am Anfang passiert, machen wir folgendes: 1 #!/ usr/bin/ python3 2 3 i = 0 4 while (True): 5 print (i) 6 i += 1 7 if i > 10: 8 break Übung: Quadratzahlen • Anstelle einfach nur zu zählen, lasse den Computer Quadratzahlen ausgeben und zwar die ersten 20: 1 1 2 4 3 9 4 16 5 ... • Verwende die format-Anweisung, um die Ausgabe detaillierter zu gestalten: 1 1 * 1 = 1 2 2 * 2 = 4 3 3 * 3 = 9 4 4 * 4 = 16 5 ...
Kapitel 2. Programmier-Einstieg 28 / 86 Verzögerung mit sleep Hier ein einfaches Beispiel wie man Verzögerungen in sein Programm einbauen kann: 1 #!/ usr/bin/ python3 2 3 import time 4 5 i = 0 6 7 while (True): 8 print ("{} Sekunde (n) vergangen .". format (i)) 9 time.sleep (1.0) 10 i += 1 Man kann auch Bruchteile von Sekunden schlafen, z. B. eine halbe Sekunde mit sleep(0.5). Oder auch länger, z. B. 10 Minuten: sleep(10 * 60). Übung: Zahlenreihen Für die folgenden Rechenübungen kannst du sleep verwenden, damit die Ausga- be zur Kontrolle langsamer ist. Du kannst auch per if und break die Ausgabe vorzeitig abbrechen lassen. 1. Lass den Computer gerade natürliche Zahlen größer 0 ausgeben. Nehme dazu das Programm aus dem vorigen Abschnitt und schaue, an welcher Stelle du eine Anpassung vornehmen musst. 2. Lass den Computer ungerade natürliche Zahlen größer 0 ausgeben. 3. Lass den Computer gerade natürliche Zahlen größer ab −120 ausgeben. 4. Lass den Computer Zahlen ausgeben, die durch 5 teilbar sind. 6. Lass den Computer die Zahlen von 100 bis 1 - also in umgekehrter Reihen- folge - ausgeben. (NEU) Übung: Tannenbaum Ziel ist es einen Tannenbaum in variabler Größe auszugeben. Ein Baum mit der Größe 7 (= Anzahl der Zeilen, die die Baumkrone bildet) sieht so aus: 1 * 2 *** 3 ***** 4 ******* 5 ********* 6 *********** 7 ************* 8 *** 9 *** 10 *****
Kapitel 2. Programmier-Einstieg 29 / 86 1) Wir beginnen mit der Baumkrone und definieren eine Funktion: 1 def baumkrone (zeile ): 2 i = 0 3 while i < zeile : 4 print ("*", end='') 5 i += 1 6 print () Der end-Parameter mit dem Leerstring bei der print-Funktion ist notwendig, damit nach einem print keine neue Zeile eingefügt wird. Die Funktion macht erst dann etwas, wenn man sie aufruft, z. B. so: 1 baumkrone (1) 2 baumkrone (2) 3 baumkrone (3) 4 baumkrone (4) 5 baumkrone (5) Das Ergebnis sollte so aussehen: 1 * 2 ** 3 *** 4 **** 5 ***** 1b) Ändere die Funktionsaufrufe so, dass das Ergebnis auf dem Kopf steht (also die längste Zeile oben statt unten). 2) Verändere die Funktion, damit die Anzahl der Sterne dem des Zielbaums entsprechen: 1 * 2 *** 3 ***** 4 ******* 5 ********* 3) Gib der Funktion einen neuen Parameter “size” (= Größe) und verwende ihn, damit die Baumkronenzeilen zentriert ausgegeben werden, indem vor den Sternen eine passende Anzahl Leerzeichen ausgegeben wird: 1 def baumkrone (zeile , size): # Neuer Parameter 'size ' 2 i = 0 3 while /* ??? */: 4 print (" ", end='') 5 i += 1 6 7 i = 0 8 while i < 2 * zeile - 1: 9 print ("*", end='') 10 i += 1
Kapitel 2. Programmier-Einstieg 30 / 86 11 print () 12 13 baumkrone (1, 7) # Der neue Parameter muss auch beim Aufrufen angegeben werden 14 baumkrone (2, 7) 15 baumkrone (3, 7) 16 baumkrone (4, 7) 17 baumkrone (5, 7) 4) Schreibe eine zusätzliche Funktion baum(size), die unter Angabe der Baum- größe, die Funktion baumkrone so aufruft, dass verschieden große Tannenbaum- kronen ausgegeben werden. 1 def baumkrone (zeile , size): 2 /* siehe oben */ 3 4 def baum(size): 5 /* ??? */ 6 7 # Baumkronen in vier verschiedenen Größen ausgeben : 8 baum (3) 9 baum (4) 10 baum (7) 11 baum (15) 5) Es fehlt noch der Stamm und der Baumstumpf. Ergänze dein Programm, so dass der vollständige Baum ausgegeben wird. Bonus: Baum mit HTML • Lade die drei Dateien von hier (https://github.com/feinstaub/tp64/tree/ master/html/baum) herunter und speichere sie unter ~/ag/htmlbaum/ ab. • Öffne die HTML-Datei mit Firefox. • Öffne die Datei nun mit Kate und versuche sie soweit zu verstehen, dass du sie so abändern kannst, dass ein 6x6 großes Schachbrettmuster entsteht. • Mit der Taste F5 kann man im Firefox die html-Datei neu laden. • Schreibe dein Python-Programm aus der vorigen Übung so um, dass es passenden HTML-Code ausgibt, der einen Baum anzeigt. • Diese Ausgabe kannst du mittels Bash-Dateiumleitung (>) in die Datei baum.html umleiten und das Ergebnis mit Firefox prüfen. • Erstelle eine Baumkrone, die 50 Zeilen hoch ist.
Kapitel 2. Programmier-Einstieg 31 / 86 Teilen mit Rest Erinnere dich an früher, wo du “Teilen mit Rest” gelernt hast. Zum Beispiel: 11 geteilt durch 4 ist gleich 2 Rest 3 (weil 2 * 4 = 8 und 8 + 3 = 11) Beim Programmieren gibt es den Modulo-Operator, der durch das Prozent-Zeichen (%) ausgedrückt wird. Er liefert von zwei gegebenen Zahlen den Rest, wenn man sie durcheinander teilt. Für das Beispiel oben 1 >>> 11 % 4 2 3 Verwende die interaktive Python-Konsole, um den %-Operator auszuprobieren. Überlege aber vorher selber, was rauskommt. 1 0 % 5 2 1 % 5 3 2 % 5 4 3 % 5 5 4 % 5 6 5 % 5 7 6 % 5 (NEU) Übung: Teilbar ohne Rest? Schreibe eine Programm, das die Zahlen von 1 bis 100 durchgeht und ausgibt, ob die jeweilige Zahl durch 7 ohne Rest teilbar ist. Die Ausgabe soll also so aussehen: 1 Folgende Zahlen sind teilbar durch 7 ohne Rest: 2 7 3 14 4 21 5 ... Verwende dazu unter anderem folgende Anweisungen / Funktionen: • while-Schleife • if-Anweisung • %-Operator • print-Anweisung (NEU) Übung: Verschachtelte Schleifen: das SEHR große 1x1 Ein guter Freund von dir hat in Mathe nicht aufgepasst und konnte zum wie- derholten Mal das kleine 1x1 nicht auswendig aufsagen (zur Erinnerung, siehe
Kapitel 2. Programmier-Einstieg 32 / 86 https://de.wikipedia.org/wiki/Einmaleins#Tabelle). Leider bekam er eine Straf- arbeit und hat nun die Aufgabe, nicht nur das kleine und Große 1x1 (https://de. wikipedia.org/wiki/Einmaleins#Tabelle, zweite Tabelle), sondern auch noch das SEHR Große 1x1 aufzuschreiben. Also wie das kleine 1x1, nur dass die Zahlen nicht bis 10 gehen, sondern bis 100! 1) Wenn man alle Zahlen untereinander schreibt, wie viele Zeilen umfasst a) das kleine 1x1 b) das Große 1x1 c) das SEHR Große 1x1? Dein Freund hat diese Zahlen eben auch ausgerechnet und ist nun etwas ver- zweifelt. Wie soll er die Aufgabe lösen, ohne wochenlang nur mit Rechnen und Schreiben beschäftigt zu sein? 1 _______________ 2 < Bitte. Hilfe ! > 3 --------------- 4 \ ^__^ 5 \ (oo)\ _______ 6 (__)\ )\/\ 7 ||----w | 8 || || 2) Hilf deinem Freund, indem du ein Programm schreibst, dass das SEHR Große 1x1 auf der Konsole ausgibt. Gehe dabei folgendermaßen vor: 2a) Schreibe ein Programm einmaleins.py, dass das kleine 1x1 ausgibt. So soll der Anfang und das Ende der Ausgabe aussehen: 1 1 x 1 = 1 2 1 x 2 = 2 3 1 x 3 = 3 4 1 x 4 = 4 5 1 x 5 = 5 6 1 x 6 = 6 7 1 x 7 = 7 8 1 x 8 = 8 9 1 x 9 = 9 10 1 x 10 = 10 11 2 x 1 = 2 12 2 x 2 = 4 13 ... 14 9 x 8 = 72 15 9 x 9 = 81 16 9 x 10 = 90 17 10 x 1 = 10 18 10 x 2 = 20 19 10 x 3 = 30 20 10 x 4 = 40 21 10 x 5 = 50 22 10 x 6 = 60
Kapitel 2. Programmier-Einstieg 33 / 86 23 10 x 7 = 70 24 10 x 8 = 80 25 10 x 9 = 90 26 10 x 10 = 100 TIPP 1: Verwende eine verschachtelte Schleife, also eine äußere und eine innere Schleife: 1 # ... 2 while (...): 3 # ... 4 while (...) : 5 # ... 6 # ... TIPP 2: Verwende die sleep-Funktion, wenn du in Zeitlupe sehen willst wie das Programm abläuft. 2b) Ändere das Programm so, dass es das Große 1x1 ausgibt (Zahlen von 1 bis 20). 2c) Jetzt sollte es leicht sein, auch noch das SEHR Große 1x1 auszugeben. (Psst. Nicht verraten, dass es am Ende gar nicht so schwer war.) 3) BONUS: Um die Ausgabe deines Programms bequem deinem Freund schicken zu können, wäre es praktisch, wenn die Ausgabe in einer Datei stehen würde. Das geht mit der bash-Shell so (ohne das $-Zeichen): 1 $ ./ einmaleins .py > tabelle .txt Die Datei tabelle.txt wird erzeugt (oder - falls schon vorhanden - überschrieben). Öffne die Datei mit kate und schaue sie dir an. Bonus: Zufallszahlen und -Buchstaben ASCII Probiere folgendes aus (die Kommentare zeigen jeweils das Ergebnis): 1 ord('A') # 65 2 ord('B') # 66 3 ord('a') # 97 4 5 chr (65) # 'A' 6 chr (66) # 'B' 7 chr (97) # 'a' ord liefert also zu einem Buchstaben eine Zahl und chr zu einer Zahl einen Buchstabe. Warum genau diese Zahlen und keine anderen? Weil das so in der ASCII- Tabelle steht: https://de.wikipedia.org/wiki/American_Standard_Code_for_ Information_Interchange#ASCII-Tabelle Übung: Suche die Buchstaben deines Namens aus der ASCII-Tabelle heraus und baue eine Zeichenkette zusammen, indem du mehrere chr-Ergebnisse mit
Kapitel 2. Programmier-Einstieg 34 / 86 plus verknüpfst. Zum Beispiel chr(65) + chr(66) + chr(67) == “ABC” Das random-Modul und help Öffne eine interaktive Python3-Shell und versuche folgendes nachzuvollziehen: Wir brauchen das Modul random. Schauen, ob es schon da ist: 1 >>> random 2 Traceback (most recent call last): 3 File "", line 1, in 4 NameError : name 'random ' is not defined Scheint nicht so. Also importieren wir es: 1 >>> import random Ist es jetzt da? 1 >>> random 2 Ja, ist es. Neugierige können diese Datei einmal öffnen und sehen wie Original- Python-Bibliotheks-Code ausschaut. Die Funktion randint aus dem Modul random verwenden: 1 >>> random . randint (1, 10) 2 7 3 >>> random . randint (1, 10) 4 3 5 >>> random . randint (1, 10) 6 8 random.randint(1, 10) liefert Zufallszahlen zwischen 1 und 10. Aber ist 1 und 10 inklusive oder nicht? Rufe dazu die eingebaute Hilfe auf: 1 >>> help( random . randint ) 2 3 Help on method randint in module random : 4 5 randint (a, b) method of random . Random instance 6 Return random integer in range [a, b], including both end points . Den Hilfeanzeigemodus kannst du mit der Taste q wieder verlassen. Arbeite jetzt wieder mit Dateien: Übung 1: Schreibe ein Programm, das zeilenweise Zufallszahlen zwischen −100 und 100 ausgibt. Übung 2: Schreibe ein Programm, das zeilenweise Zeichenketten von je 10 Zu- fallsbuchstaben ausgibt, also z. B.: 1 lqZYWUiHxj
Kapitel 2. Programmier-Einstieg 35 / 86 2 UhoniELbgo 3 zBvObSTGfv 4 QjRJngcfuT 5 ... (todo später: https://github.com/feinstaub/tp64/blob/master/sample-code/rand-chr. py: for in range) 2.4 grep In der Standard-Ausgabe suchen Die Standard-Ausgabe ist das, was du mit dem print-Befehl ausgibst. Auch an- dere Shell-Programme schreiben auf die Standard-Ausgabe (auch standard out genannt), z. B. der folgende Befehl listet alle Pakete auf, die das Wort ’test’ enthalten: 1 zypper se test Probiere es aus. Mit dem Pipe-Symbol (|) kann man einen Shell-Ausgabestrom in ein anderes Programm umleiten. Ein Programm, das man oft auf die rechte Seite der Pipe schreibt ist grep, ein Suchprogramm. Beispiel: 1 zypper se test | grep samba Jetzt werden nur noch Zeilen ausgegeben, die das Wort samba enthalten. Außer- dem wird das Wort hervorgehoben. Beispiele / Zufallszeichenketten Hier ein Programm, dass Zufallszeichenketten ausgibt: 1 #!/ usr/bin/ python3 2 3 import random 4 5 i = 0 6 while (True): 7 s = "" 8 for a in range (0, 20): 9 c = random . randint (65 , 122) 10 s += chr(c) 11 print (str(i) + ":" + s) 12 i += 1 Speichere es in der Datei rand-chr.py und lass das Programm laufen. Dann probiere der Reihe nach folgende Zeilen aus und schaue, was passiert:
Kapitel 2. Programmier-Einstieg 36 / 86 1 ./rand -chr.py | grep 0000 2 ./rand -chr.py | grep -i gre Übung • Suche mit grep nach deinem Namen in den Zufallsbuchstaben (nur die ersten 3 Buchstaben, sonst könnte es länger dauern) Die Prozessorauslastung anschauen Außer dem Strg+C kannst du ein Programm auch anders beenden. Drücke Strg+Esc um den System-Monitor zu öffnen. Damit kannst du unter anderem jedes Pro- gramm suchen und beenden (“kill”). Frage: Warum z. B. nur 25 % statt 100 %? (Tipp: verwende ksysguard, um herauszufinden, wieviele Prozessor-Kerne deine CPU hat.) Bonus: Reguläre Ausdrücke (TODO: erklären was reguläre Ausdrücke sind) 1 ./rand -chr.py | grep '\( abc \) \|\( def \) ' 2 ./rand -chr.py | grep -i -E '(abc)|( def)' 3 ./rand -chr.py | grep -E '([ abcdefg ]abc)|( def .*a)' Für zuhause: Sprachausgabe Installiere das Programm espeak. Schreibe ein kleines Zähl-Programm, das Zahlen ausgibt und speichere es in der Datei counter.py. 1 #!/ usr/bin/ python3 2 3 i = 0 4 while (True): 5 print (i) 6 i += 1 Probiere folgende Befehle aus: 1 ./ counter .py | espeak 2 ./ counter .py | espeak -vde 3 ./ counter .py | grep --line - buffered 1111 | espeak -vde
Kapitel 2. Programmier-Einstieg 37 / 86 Interne Anmerkung • grep scheint nicht zu funktionieren, wenn das Python-Programm sleep ver- wendet, um die Ausgabegeschwindigkeit zu drosseln. Warum? -> Lösung: import sys, sys.stdout.flush()
Kapitel 3. FAQ 38 / 86 Kapitel 3 FAQ 3.1 Die Kommandozeile Wenn man unter GNU/Linux mit der Kommandozeile Befehle absetzen möch- te, dann kommt üblicherweise die Bash zum Einsatz. Die Bash ist eine UNIX- Shell. Man sagt auch Konsole oder Kommandozeile dazu. Die folgenden Aufgaben zeigen, wie man die Bash startet und wie sie bedient wird. Wenn im Folgenden von ’Kommandozeile’ gesprochen wird, dann ist die Bash gemeint. 3.1.1 Kommandozeile starten Unter KDE/Plasma: • Alt+Leertaste drücken (-> Die krunner-Leiste öffnet sich am oberen Bild- schirmrand) • konsole eingeben und das Suchergebnis entweder mit der Maus anklicken oder die ENTER-Taste drücken. Es öffnet sich ein Fenster mit schwarzem Hintergrund und hellem Text, z. B.: spiderman@linux - host1 :~> Diesen Text nennt man Prompt, also Eingabeaufforderung. Dahinter ist ein helles Rechteck zu sehen, das anzeigt, wo die Buchstaben erscheinen, die der Benutzer mit der Tastatur eingibt. Das Prompt setzt sich im Einzelnen so zusammen: • spiderman: Der Benutzername des eingeloggten Benutzers • @ (at-Zeichen): Trennzeichen • linux-host1: der Rechnername • : (Doppelpunkt): Trennzeichen
Kapitel 3. FAQ 39 / 86 • ~ (Tilde): Das aktuelle Verzeichnis. Die Tilde steht für das Home-Verzeichnis (“Persönlicher Ordner”) des eingeloggten Benutzers. • > (Größer-als-Zeichen): Trennzeichen • Cursor: hier werden Benutzereingaben eingefügt 3.1.2 Yakuake installieren • yakuake ist eine Konsole, die man mit der F12-Taste öffnen kann und die immer im Hintergrund bereit ist. • Installiere sie mittels zypper (Wie geht das?). • yakuake einmalig mit krunner (Alt+Leertaste, yakuake eingeben, ENTER) starten. • Ab jetzt kann yakuake mit der Taste F12 geholt und mit nochmaligem Druck wieder versteckt werden. 3.1.3 Einstieg • Neue Zeichen, die über die Tastatur eingegeben erscheinen immer dort, wo sich der Cursor (ausgefülltes Rechteck) befindet • Befehle werden immer zeilenweise eingegeben und jeweils mit der ENTER- Taste abgeschlossen. Erste Befehle absetzen • Öffne eine Kommandozeile (siehe oben). Es erscheint die Eingabeaufforde- rung, die so ähnlich aussieht: 1 user@linux -85 rg:~> • Gebe date über die Tastatur ein: 1 user@linux -85 rg:~> date • Drücke ENTER. Das Ergebnis sieht ungefähr so aus: 1 user@linux -85 rg:~> date 2 So 2. Okt 20:26:40 CEST 2016 • Glückwunsch! Du hast den ersten Kommandozeilen-Befehl abgesetzt. • Drücke nun Taste “Cursor hoch” (das ist die obere Pfeiltaste aus dem Pfeil- tastenblock auf der Tastatur) => der letzte Befehl erscheint wieder. • Drücke ENTER => Der Befehl wird erneut ausgeführt.
Kapitel 3. FAQ 40 / 86 Konvention: das $-Prompt Wenn im weiteren Verlauf des Kurses ein Bash-Befehl abgesetzt werden soll, dann wird das kenntlich gemacht, indem vor dem Befehl ein $-Zeichen steht. Also z. B. 1 $ date bedeutet, dass du wie im vorigen Abschnitt beschrieben den date-Befehl ausfüh- ren sollst (das $-Zeichen gehört also nicht zum Befehl dazu). Übung • Führe den Befehl 1 $ ls aus. => Das aktuelle Verzeichnis wird aufgelistet. • Führe den Befehl 1 $ ls -la aus. => Das aktuelle Verzeichnis wird ausführlicher aufgelistet. ------------- STOPP -------------- Wenn du von der Primzahlenaufgabe hierher kamst, dann bist du mit dieser Seite erst einmal fertig und kannst wieder zurückgehen und dort weitermachen. ------------- STOPP -------------- 3.1.4 Dateien und Verzeichnisse • Umgang mit Dateien: http://www.selflinux.org/selflinux/html/dateien_unter_ linux01.html • Umgang mit Verzeichnissen: http://www.selflinux.org/selflinux/html/verzeichnisse_ unter_linux02.html Weiteres Material • Linux-Verzeichnisstruktur: http://www.selflinux.org/selflinux/html/verzeichnisse_ unter_linux01.html • siehe auch https://de.wikipedia.org/wiki/Filesystem_Hierarchy_Standard • Command line crash course: https://learnpythonthehardway.org/book/appendixa. html
Kapitel 3. FAQ 41 / 86 3.1.5 Erweitert Was ist eine Shell? • Lese dir das hier durch: SelfLinux - Was ist eine Shell? • Die Bash ist eine Unix-Shell. Eine Unix-Shell ist einer von vielen Komman- dozeileninterpretern, wie z. B. der Python-interpreter. • Die Kommandozeile ist einzeln, aber auch in vielen Programmen verfügbar, um schnell System-Befehle absetzen zu können. Die Funktionsweise ist dabei immer die gleiche. • Konsole (einzeln als Programm) • Yakuake (Taste F12) • in Dolphin (Taste F4) • in Kate (als Terminal-Plugin) Historie abrufen Strg+R • Mit den Cursor-Tasten ’rauf’ und ’runter’ kann man sich vorher eingegebene Befehle wieder holen. • Mit Strg+R kann man in der Historie suchen: 1. Strg+R drücken 2. Worte eingeben 3. So lange Strg+R drücken, bis die ge- wünschte Befehlszeile gefunden wurde. $ history Die Strg+R-Methode ist bei wenig Übung etwas hakelig. Folgendes geht auch: 1 $ history oder direkt nach etwas suchen (z. B. nach “cowsay”): 1 $ history | grep cowsay Tastenkürzel Bash • Strg+A - An den Anfang der Zeile • Strg+E - Ans Ende der Zeile • Strg+K - Alles rechts vom Cursor löschen • Strg+A K - Ganze Zeile löschen • Siehe http://www.selflinux.org/selflinux/html/bash_basic02.html#d27e146
Kapitel 3. FAQ 42 / 86 Konsole / Yakuake • Strg+Umschalt+T - Neue Session (= neuen Tab) öffnen • Umschalt+Cursor rechts/links - Zwischen Sessions umschalten • Geteilte Ansicht (split view): rechte Maustaste auf Session-Name -> “Split Left/Right” Konsole in Dolphin • Dolphin öffnen • F4 drücken • cd und ls verwenden und beobachten wie sich die Ordner-Ansicht oben synchronisiert. • In der Ordner-Ansicht navigieren und beobachten wie sich die Konsole syn- chronisiert. Aktuelles Verzeichnis mit Dolphin öffnen 1 $ xdg -open . Standardeingabe und -ausgabe • TODO: Crash-Kurs • cowsay • Etwas schreiben und mit Strg+D beenden • create file aaa: c2b1a3 • sort < aaa • sort -k 1 < aaa • etc. mit Python todo: • http://stackoverflow.com/questions/1450393/how-do-you-read-from-stdin-in-python • https://en.wikibooks.org/wiki/Python_Programming/Input_and_Output
Sie können auch lesen