https://hackmd.io/@djpG2zTsTWCiMPJg_cjWrQ/Bk7vHuPkd https://repl.it/teams/join/jivrvvuoljblvvkwlagmgsgrrtwmokot-Kalkspace Name: penny4wdr Passwort: wasichwill Zeile markieren, dann 'Annotate' > bitte jeder mal 'Hallo' schreiben # KEINE PANIK! Ja, das ist eine Coding-Aufgabe für angehende Volontär*innen, aber kein Grund zur Panik. Die Übungen setzen kein Vorwissen voraus. Schritt für Schritt werden hier im Text Grundlagen der Programmiersprache Python erklärt. Mit den Übungen dazu möchten wir herausfinden, wie furchtlos ihr gegenüber technischen Herausforderungen seid. - Diese Aufgabe ist so ausgelegt, dass nur Menschen mit Vorkenntnissen komplett durchkommen. Die letzte Aufgabe wird manchmal in Job-Interviews benutzt, wenn sich jemand für eine Entwickler:innen-Stelle bewirbt. Es ist also nicht schlimm, wenn du nicht alle Aufgaben schaffst. Das wird vielen so gehen. - Deine Herangehensweise und Frustrationstoleranz zählen mehr als deine Coding-Ergebnisse. - Alles, was in die richtige Richtung geht, wird gezählt. Du kannst auch in Worten hinschreiben, was du glaubst, was zu tun ist. Auch wenn dein Code beim Ausführen nicht funktioniert, kannst du trotzdem Punkte bekommen. - Wenn Du an einem Punkt nicht weiterkommst, kannst Du mir schreiben, indem Du auf die Zeilenzahl klickst und 'annotate' auswählst. Ich gebe dann einen Tipp. Lieber nachfragen und dranbleiben - auch gezielte Fragen werden positiv bewertet. Ich kann sehen, wo du gerade bist und wie schnell du welche Aufgabe abgibst. - 'Copy and Paste' ist dein Freund. Die meisten Aufgaben lassen sich lösen, indem du benötigte Stellen aus den Beispielen zusammenkopierst und entsprechend der Aufgabenstellung anpasst. ## 00_Hello_World In `repl.it` findest du unter 00_Hello_world die Datei `main.py` mit folgendem Code: ``` print('Hello world!') print('\n') ``` Hier werden Code und Aufgaben genauer erklärt: `print('Hello world')` Schreibt 'Hello world' rechts ins schwarze Fenster `print('\n')` \n ist ein Sonderzeichen. Es erzeugt einen Zeilenumbruch, auf englisch 'newline' so dass im schwarzen Fenter eine Leerzeile erscheint. Das ist nur ein Helfer, um die Code-Ausgabe etwas sortierter darzustellen. Zeilen die mit # anfangen, werden grau dargestellt: das sind Kommentare zum Code. Beim Ausführen des Programmes werden sie ignoriert. ! Wichtig: Manchmal sind Teiler der Lösung vorgegeben, dann musst du das # am Anfang der Zeile löschen, um den Code wieder ausführbar zu machen: ``` # print('auskommentiert') print('ausführbar') ``` ### Jetzt geht's los - Bearbeite in `main.py` deine erste Aufgabe. - ! Wenn Du damit fertig bist, klicke 'submit' oben rechts in der Ecke. ### Fehler Lösche in `main.py` mal den # vor diesem Code: ``` # Beispiel für einen Fehler # print('Hello) ``` In der Console rechts erscheint folgender Fehler: ``` File "main.py", line 14 print('Hello) ^ SyntaxError: EOL while scanning string literal ``` Keine Panik! Fehlermeldungen gehören dazu. Lies die Fehlermeldung am besten von unten nach oben: In der letzten Zeile steht, dass es Python ein EOL (für end of line) beim Lesen festgestellt hat. Weiter oben liest Du, dass der Fehler in der Datei `main.py` in Zeile 14 aufgetreten ist: `print('Hello)` Hier fehlt das schließende Anführungszeichen nach 'Hello'. ## 01_Strings_and_Input Erklärung zu diesem Programm: ``` hello = 'Hallo' name = input('Tippe deinen Namen ein: ') print('Hallo', name) print('\n') ``` `'Hallo'` Eine Folge von Zeichen zwischen Anführungszeichen heißt in Python 'string'. `hello =` legt eine 'Variable' an. Quasi eine Kiste mit dem Namen 'hello', um Dinge darin zu speichern. `name = input('Tippe deinen Namen ein: ')` Mit der input-Funktion wird die Nutzer:in des Programms aufgefordert, etwas einzugeben. Mit `name =` wird das, was die Nutzerin eingetippt hat, in der Variable `name` gespeichert. `print('Hallo', name)` Hier wird für die Ausgabe eine Mischung aus einem String 'Hallo' und einer Variable 'name' verwendet. So wird zum Beispiel der Name, den die Nutzer:in vorher eingegeben hat, in einer Begrüßung genutzt. ## 02_Datum **Erste Hürde geschafft!** In der Datei `main.py` findest du folgenden Code: ``` from datetime import datetime heute = datetime.now() print(heute) ``` Hier die Erklärung, was dieser Code-Block tut: `from datetime import datetime` Sagt Python, dass es die Funktion datetime aus dem Paket namens 'datetime' benutzen soll. Ein Paket ist Code, den andere Entwickler:innen geschrieben haben und der Python Community zur Verfügung stellen. Im Paket datetime finden sich nützliche Funktionen rund um das Thema Datum. Die müssen wir nicht neu programmieren, sondern können das nutzen, was die Python Community schon erarbeitet hat. `heute = datetime.now()` Hier wird eine 'Variable' angelegt. Quasi eine Kiste, um Dinge darin zu speichern. In diesem Fall das heutige Datum und die aktuelle Zeit(datetime.now()). Mit 'heute =' kleben wir auch ein Namensschild darauf. `print(heute)` Wenn wir in einem Befehl die Variable 'heute' benutzen, können wir damit die Inhalte der Kiste auslesen oder zum Beispiel das heutige Datum mit Uhrzeit ausgeben. Hier die Erklärung zum nächsten Abschnitt: ``` # Mit Erklärung davor print('Heute als Datetime:', heute) print('Heute als Datum:', heute.date()) print('Aktuelles Jahr:', heute.year) vergangenes_jahr = heute.year -1 print('Vergangenes Jahr:', vergangenes_jahr) print("\n") ``` Hier werden dir noch ein paar Erklärungen zur Ausgabe gegeben. `print('Heute als Datum:', heute.date())` Wenn Du `.date()` an heute anhängst, wird nicht das Datum mit Uhrzeit ausgegeben, sondern nur das Datum (ohne Uhrzeit). `print('Aktuelles Jahr:', heute.year)` Wenn Du '.year' an heute hängst, liest das Programm aus dem aktuellen Datum nur das aktuelle Jahr heraus. `vergangenes_jahr = heute.year - 1` Mit Variablen kannst Du auch rechnen, also zum Beispiel das aktuelle Jahr -1, um das vergangene Jahr auszugeben. #### Cheatsheet: ``` # Eine Variable speichern variable = 'Beispiel' varbiable2 = 1 # Etwas ausgeben print('Ausgabe:', variable) ``` ## 03_Rechnen **Rechnen mit Python** ### TAGE SEIT DEINER GEBURT - Gib beim input 'geburtstag' deinen Geburtstag ein und bestätige mit Enter - Dann rechnet Python für dich aus, wie viele Tage seit deiner Geburt vergangen sind ``` from datetime import datetime heute = datetime.now() eingabe = input('Bitte gib deinen Geburtstag in dieser Form ein "17.10.1980": ') geburtstag = datetime.strptime(eingabe,"%d.%m.%Y") print(geburtstag) alter = heute - geburtstag print(alter.days, "Tage sind seit deiner Geburt vergangen.") ``` `geburtstag = datetime.strptime(eingabe,"%d.%m.%Y")` `.strptime()` zieht das Datum aus einer Zeichenfolge heraus, dafür braucht es die Angabe in welchem Format das Datum eingegeben wird - in diesem Fall ein 'deutsches' Datum: tt.mm.JJJJ. Als Uhrzeit wird standardmäßig 00:00:00 gesetzt. `alter = heute - geburtstag` In Python kannst Du mit Zahlen rechnen und auch mit Variablen, in denen Zahlen stecken: ``` + für plus - für minus * für mal / für geteilt % für den Rest einer Division ``` ### TAGE BIS ZUM NÄCHSTEN GEBURTSTAG Um ein Programm zu schreiben, das die Tage bis zum nächsten Geburtstag berechnet, nehmen wir das aktuelle Jahr mit dem Monat und Tag des Geburtstags und ziehen davon 'heute' ab. Damit die Ausgabe stimmt, müssen wir noch einen Tag dazurechnen. ``` geburtstag_in_diesem_jahr = (datetime(heute.year, geburtstag.month, geburtstag.day) - heute).days + 1 print('Dein Geburtstag ist in', geburtstag_in_diesem_jahr, 'Tagen.') ``` ## 04_Schleifen Möchtest Du in der Programmierung Dinge wiederholt tun, dann kannst Du eine Schleife dafür nutzen: ``` print('Mehrmals Hallo') for zaehler in range(5): print('Hallo') ``` Für eine Schleife brauchst Du den feststehenden Befehl `for` etwas `in`. Eine for-Schleife wird verwendet, um für jedes Element einer Reihe etwas zu tun. Eine Reihe kann zum Beispiel eine Liste sein, eine Menge oder eine Zeichenkette. `print('Liste von 1-4:', list(range(1,5)))` `range(1,5)` liefert eine Liste mit den Zahlen von 1 bis 5 - im wörtlichen Sinne, also ohne die 5. `range(5,1, -1)` liefert eine umgekehrte Liste mit den Zahlen von 5 bis 1, bei denen immer um eins runtergezählt wird: [5,4,3,2,1] Dieses kleine Programm gibt zum Beispiel ein komplettes Einmaleins aus: ``` print('Einmaleins mit range') for i in range(1,11): print(i, 'mal 8 = ', i * 8) ``` Mit `import time` greifst du auf das Modul time zu. `time.sleep(1)` führt dazu, dass dein Programm eine entsprechende Zeit lang wartet. ``` import time print('Hello') time.sleep(1) print('Hello again') ``` Hier wird erst 'Hallo' ausgegeben, dann 1 Sekunde gewartet und dann 'Hallo Again' ausgegeben. ## 05_Verzweigungen Mit Verzweigungen kann ein Programm auf der Basis von überprüfbaren Aussagen Entscheidungen treffen: 'Wenn ... dann'. Damit kann man schon ein erstes Spiel schreiben, in diesem Fall ein 'Zahlen raten'. Teste das Spiel, indem Du erst eine Zahl eingibst, die kleiner als die geheine Zahl ist, dann eine, die größer als die geheime Zahl ist und dann die geheime Zahl. ``` from random import randint geheime_zahl = randint(1,10) print('Pssst! Geheime Zahl:', geheime_zahl, '\n') antwort = 0 while antwort != geheime_zahl: antwort = int(input('Tippe eine Zahl: ')) if antwort > geheime_zahl: print('Die Zahl ist kleiner\n') elif antwort < geheime_zahl: print('Die Zahl ist größer\n') print('Richtig!') ``` `from random import randint` Damit wird aus dem Zufalls-Modul die Funktion Zufallszahl importiert. `geheime_zahl = randint(1,10)` Damit wird eine zufällige Zahl zwischen 1 und 10 als 'geheime Zahl' abgespeichert. `print('Pssst! Geheime Zahl:', geheime_zahl, '\n')` Um den Programmablauf besser verstehen zu können, geben wir diese Zahl hier aus - auch wenn das Spiel natürlich dadurch ziemlich langweilig wird. `antwort = 0` Die zu findende Antwort wird erst einmal auf 0 gesetzt. Wenn es um Wörter ginge, könnte das auch ein leerer String sein: `antwort = ''`. `while antwort != geheime_zahl:` Hier wird eine andere Art von Schleife - neben der for...in-Schleife - genutzt. Die while-Schleife oder auf deutsch 'Solange ... bis'. Solange die Antwort nicht gleich `!=` der geheimen Zahl ist, so lange läuft eine Schleife. Um zu testen, dass zwei Dinge gleich sind, wird in Python `==` oder eben nicht gleich `!=` verwendet. `antwort = int(input('Tippe eine Zahl: '))` Die Schleife fragt zunächst einmal einen Tipp bei den Nutzer:innen ab. Und speichert diesen Input in der Variable 'antwort'. Je nachdem, wie dieser Tipp aussieht, wird eine entsprechende Antwort gegeben: ``` if antwort > geheime_zahl: print('Die Zahl ist kleiner\n') elif antwort < geheime_zahl: print('Die Zahl ist größer\n') ``` Wenn die Antwort größer ist als die geheime Zahl,dann wird ausgegeben, dass die gesuchte Zahl kleiner ist. Wenn die Antwort kleiner ist als die gesuchte Zahl, dann wird ausgegeben, dass die gesuchte Zahl größer ist. `print('Richtig!')` Die while-Schleife endet, wenn die Antwort gleich der geheimen Zahl ist, dann wird 'Richtig!' ausgegeben.