Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
lesson:coding04 [2023/12/03 17:07] – angelegt mccab99 | lesson:coding04 [2024/01/15 09:10] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 3: | Zeile 3: | ||
Um genauer zu verstehen, wie der OzoBot über die Blöcke tatsächlich gesteuert wird, brauchen wir einen kleinen Exkurs in das Programmieren mit Python. Zudem werden dir komplexere Programme mit den Blöcken viel besser gelingen, wenn du mehr über die Hintergründe und die Bedeutung der einzelnen Elemente weißt. Wir konzentrieren uns im ersten Schritt auf Bedingungen und Schleifen, müssen aber auch schon Variablen einführen. | Um genauer zu verstehen, wie der OzoBot über die Blöcke tatsächlich gesteuert wird, brauchen wir einen kleinen Exkurs in das Programmieren mit Python. Zudem werden dir komplexere Programme mit den Blöcken viel besser gelingen, wenn du mehr über die Hintergründe und die Bedeutung der einzelnen Elemente weißt. Wir konzentrieren uns im ersten Schritt auf Bedingungen und Schleifen, müssen aber auch schon Variablen einführen. | ||
- | Damit wir keine Software auf dem Rechner installieren müssen, nutzen wir zum Programmieren eine Online-Umgebung. | + | Damit wir keine Software auf dem Rechner installieren müssen, nutzen wir zum Programmieren eine Online-Umgebung. Falls die eine nicht funktioniert, |
- | [[https:// | + | - [[https:// |
+ | - [[https:// | ||
Dort hinein kannst du deinen Code schreiben, laufen lassen und auch herunterladen. | Dort hinein kannst du deinen Code schreiben, laufen lassen und auch herunterladen. | ||
+ | |||
+ | === Variablen === | ||
+ | Variablen können Werte speichern. Das ist sehr praktisch, wenn man Werte in einem Programm immer wieder einmal braucht. Schau dir [[https:// | ||
+ | |||
+ | Für die ganz Schnellen unter euch, die eher an Beispielen lernen: | ||
+ | |||
+ | <file python variablen.py> | ||
+ | # Variablen einen Wert zuweisen | ||
+ | wahrheitswert = True | ||
+ | zahl = 42 | ||
+ | pi = 3.14 | ||
+ | vorname = ' | ||
+ | |||
+ | # Variablen ausgeben | ||
+ | print(wahrheitswert) | ||
+ | print(vorname) | ||
+ | print(zahl) | ||
+ | print(pi) | ||
+ | </ | ||
+ | |||
+ | Variablen setzt Python automatisch auf den richtigen Datentyp, d.h. Python erkennt an eurer Zuweisung, ob es sich um eine boolesche Variable (wahrheitswert), | ||
+ | |||
+ | <WRAP center round info 80%> | ||
+ | == Wie habe ich das mit der Anzeige gemacht? == | ||
+ | Du hast bestimmt gesehen, dass der Code dieses ersten Programmes hier im Wiki gut dargestellt wird, und du dir das Programm durch Klick auf " | ||
+ | |||
+ | <code dokuwiki> | ||
+ | <file python variablen.py> | ||
+ | # Variablen einen Wert zuweisen | ||
+ | wahrheitswert = True | ||
+ | zahl = 42 | ||
+ | pi = 3.14 | ||
+ | vorname = ' | ||
+ | |||
+ | # Variablen ausgeben | ||
+ | print(wahrheitswert) | ||
+ | print(vorname) | ||
+ | print(zahl) | ||
+ | print(pi) | ||
+ | </ | ||
+ | </ | ||
+ | " | ||
+ | </ | ||
+ | |||
+ | === Bedingungen === | ||
+ | Ich hatte dir schon bei den Blöcken die Entsprechung in Python-Code angegeben. Ausführlich wird das Ganze nochmal [[https:// | ||
+ | |||
+ | Für die ganz Schnellen unter euch, die eher an Beispielen lernen: | ||
+ | |||
+ | == Einfache Bedingungen == | ||
+ | |||
+ | <file python bedingung.py> | ||
+ | # Hier wird ein Wert zugewiesen (einfaches Gleichheitszeichen) | ||
+ | zahl = 42 | ||
+ | |||
+ | # Hier wird auf Gleichheit überprüft (zweifaches Gleichheitszeichen) | ||
+ | if wert == 42: | ||
+ | print(' | ||
+ | | ||
+ | print(' | ||
+ | </ | ||
+ | |||
+ | Zum if-Block gehören die Zeilen, die gleich eingerückt sind. Das wäre in deinen Blockprogrammen all das, was du in die Lücke setzt. | ||
+ | |||
+ | == Bedingungen mit else == | ||
+ | |||
+ | <file python bedingung_mit_else.py> | ||
+ | wert = 9 | ||
+ | if wert < 5: | ||
+ | print(' | ||
+ | else: | ||
+ | print(' | ||
+ | </ | ||
+ | |||
+ | == Bedingungen mit Mehrfachprüfung == | ||
+ | |||
+ | Du solltest " | ||
+ | |||
+ | <file python bedingung_mit_elif.py> | ||
+ | wert = 9 | ||
+ | if wert < 5: | ||
+ | print(' | ||
+ | elif wert == 5: | ||
+ | print(' | ||
+ | else: | ||
+ | print(' | ||
+ | </ | ||
+ | |||
+ | == Operatoren bei Bedingungen == | ||
+ | * **==** gleich | ||
+ | * **!=** ungleich (!:not, =:equal) | ||
+ | * **<** kleiner | ||
+ | * **>** größer | ||
+ | * **<=** kleiner gleich | ||
+ | * **>=** größer gleich | ||
+ | |||
+ | == Boolesche Vergleiche == | ||
+ | * **and** (und) | ||
+ | * **or** (oder) | ||
+ | |||
+ | Hierzu ein Beispiel: | ||
+ | |||
+ | <file python bedingung_mit_boole.py> | ||
+ | wert = 9 | ||
+ | # Wenn der Wert kleiner 15 und größer als 6 ist, dann ... sonst ... | ||
+ | if wert < 15 and wert > 6: | ||
+ | print(' | ||
+ | else: | ||
+ | print(' | ||
+ | </ | ||
+ | |||
+ | ==== Schleifen ==== | ||
+ | Die While-Schleife prüft zuerst, ob eine Bedingung zutrifft. [[https:// | ||
+ | |||
+ | <file python while.py> | ||
+ | durchgang = 1 | ||
+ | while durchgang < 11: | ||
+ | print(durchgang) | ||
+ | # Wir erhöhen bei jedem Schleifendurchgang die Variable durchgang um 1 (auf schlau: Wir inkrementieren die Variable) | ||
+ | durchgang = durchgang + 1 | ||
+ | print(" | ||
+ | </ | ||
+ | |||
+ | ==== Nutzereingaben ==== | ||
+ | Manchmal soll der Benutzer einen Wert eingeben. Das ist in Python sehr einfach: | ||
+ | |||
+ | <file python input.py> | ||
+ | # Die Eingabe wird der Variablen name zugewiesen | ||
+ | name = input(" | ||
+ | print(name) | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 80%> | ||
+ | == Typen von Variablen == | ||
+ | Standardmäßig liest Python mit der Funktion " | ||
+ | |||
+ | Python kennt verschiedene Typen von Variablen: | ||
+ | * **str** oder auch " | ||
+ | * **int** oder auch " | ||
+ | * **float ** oder auch Fließkommazahl (Kommazahlen, | ||
+ | |||
+ | Wenn du mit Eingaben aus input() rechnen willst, musst du diese Eingabe in den benötigten Datentyp umwandeln (" | ||
+ | <file python cast_01.py> | ||
+ | # Die Eingabe wird der Variablen name zugewiesen | ||
+ | # durch int() wird die Eingabe in eine Ganzzahl umgewandelt | ||
+ | zahl = int(input(" | ||
+ | print(zahl) | ||
+ | </ | ||
+ | Es geht aber auch nachträglich: | ||
+ | <file python cast_02.py> | ||
+ | # Die Eingabe wird der Variablen name zugewiesen | ||
+ | zahl = input(" | ||
+ | # jetzt umwandeln | ||
+ | zahl = int(zahl) | ||
+ | print(zahl) | ||
+ | </ | ||
+ | Du musst also ggf. den Datentyp ändern, wenn du mit den Eingabewerten rechnen möchtest! | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Aufgaben ==== | ||
+ | Du kannst alle Aufgaben online erledigen: [[https:// | ||
+ | |||
+ | Schreibe ein Python-Programm, | ||
+ | - die Eingabe einer Zahl erwartet und diese Zahl um 10 erhöht ausgibt ( zahl = zahl + 10 ) | ||
+ | - die Eingabe eines Strings (Zeichenkette) erwartet, diesen String in einer anderen Variable speichert und diese andere Variable ausgibt. | ||
+ | - zwei Variablen mit Strings belegt, eine neue Variable aus der Summe der Strings bildet und ausgibt. | ||
+ | - die ersten 10 Werte einer linearen Funktion y = bx + a ausgibt, wobei der Nutzer b und a eingeben können soll. | ||
+ | - ein Zahlenratespiel durchführt. Du gibst im Programm einen Wert zwischen 0 und 100 vor, den der Nutzer raten soll. Rät er zu klein, gibt es eine Ausgabe "zu klein" und eine neue Eingabe, ansonsten eine Ausgabe "zu groß" und eine neue Eingabe, bis die Zahl geraten wurde. | ||
+ | |||
+ | <WRAP center round info 80%> | ||
+ | == Erweiterung zu Aufgabe 5 == | ||
+ | Du kannst eine zufällige Zahl zwischen 1 und 100 zu Anfang des Programmes so erzeugen: | ||
+ | <file python zufall.py> | ||
+ | import random | ||
+ | zufall = random.randint(1, | ||
+ | </ | ||
+ | ... dann wird es auch für dich beim Testen ein wenig spannender. | ||
+ | </ | ||
+ | |||
+ | ==== Lösungen ==== | ||
+ | |||
+ | === Aufgabe 1 === | ||
+ | <file python zahlplus10.py> | ||
+ | zahl = input(" | ||
+ | zahl = int(zahl) | ||
+ | print(" | ||
+ | print(zahl+10) | ||
+ | </ | ||
+ | |||
+ | === Aufgabe 2 === | ||
+ | <file python copytovar.py> | ||
+ | eingabe = input(" | ||
+ | neu = eingabe | ||
+ | print(" | ||
+ | print(neu) | ||
+ | </ | ||
+ | |||
+ | === Aufgabe 3 === | ||
+ | <file python combinestrings.py> | ||
+ | teil01 = " | ||
+ | teil02 = " | ||
+ | kombi = teil01+teil02 | ||
+ | print(kombi) | ||
+ | </ | ||
+ | |||
+ | === Aufgabe 4 === | ||
+ | <file python linearfunc.py> | ||
+ | b = input(" | ||
+ | a = input(" | ||
+ | b = int(b) | ||
+ | a = int(a) | ||
+ | x = 0 | ||
+ | while x < 10: | ||
+ | print(x*b+a) | ||
+ | x = x + 1 | ||
+ | </ | ||
+ | |||
+ | === Aufgabe 5 === | ||
+ | <file python guess_number.py> | ||
+ | import random | ||
+ | zufallszahl = random.randint(1, | ||
+ | |||
+ | eingabe = input(' | ||
+ | eingabe = int(eingabe) | ||
+ | |||
+ | # eine beliebige Variable mit einem Wert | ||
+ | # wenn man gegen die Variable prüft, kommt immer " | ||
+ | raten = True | ||
+ | |||
+ | # Schleife läuft so lange, bis die Variable " | ||
+ | while raten: | ||
+ | if eingabe < zufallszahl: | ||
+ | print(' | ||
+ | elif eingabe > zufallszahl: | ||
+ | print(' | ||
+ | else: | ||
+ | print(' | ||
+ | raten = False | ||
+ | if raten: | ||
+ | eingabe = input(' | ||
+ | eingabe = int(eingabe) | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | === Codeanalysen === | ||
+ | Was macht dieses " | ||
+ | <file python analyse1.py> | ||
+ | schalter = True | ||
+ | |||
+ | while schalter | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Welchen Wert bekommt " | ||
+ | <file python analyse2.py> | ||
+ | eingabe = input(' | ||
+ | |||
+ | if eingabe: | ||
+ | | ||
+ | else: | ||
+ | | ||
+ | </ | ||
+ | |||
+ | ===== Arrays ===== | ||
+ | Arrays sind spezielle Datenstrukturen, | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Strenggenommen gibt es in Python eigentlich keine Arrays, sondern man kann Listen so wie Arrays verwenden, aber das ist erstmal eine Spitzfindigkeit. | ||
+ | </ | ||
+ | |||
+ | <file python array_00.py> | ||
+ | autos = [" | ||
+ | noten = [1, | ||
+ | print(autos[0]) | ||
+ | print(noten[2]) | ||
+ | </ | ||
+ | |||
+ | === Wichtige Arrayfunktionen === | ||
+ | Oft braucht man die Länge eines Arrays. Das geht über die Funktion len(). Die Länge gibt die Anzahl der Elemente eines Arrays an. | ||
+ | |||
+ | <file python array_01.py> | ||
+ | autos = [" | ||
+ | anzahl_autos = len(autos) | ||
+ | print(anzahl_autos) | ||
+ | </ | ||
+ | |||
+ | Manchmal muss man ein leeres Array mit einer vorgebenen Anzahl an Elementen vorbereiten (initialisieren). | ||
+ | |||
+ | <file python array_02.py> | ||
+ | autos = [0]*10 | ||
+ | </ | ||
+ | |||
+ | ... erzeugt an Array aus 10 Elementen, die alle den Wert 0 besitzen. | ||
+ | |||
+ | === Die For-Schleife === | ||
+ | Fast speziell für ein Array konzipiert ist die For-Schleife. Mit dieser kann man sehr bequem durch ein Array durchlaufen. Das geschieht in folgendem Code. Das Array " | ||
+ | |||
+ | <file python array_02.py> | ||
+ | autos = [" | ||
+ | anzahl_autos = len(autos) | ||
+ | |||
+ | for i in range(anzahl_autos): | ||
+ | print(autos[i]) | ||
+ | </ | ||
+ | |||
+ | range() gibt (für uns erstmal) an, wie oft die For-Schleife durchlaufen werden soll - in diesem Beispiel viermal. i ist die sogenannte " | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Strenggenommen handelt es sich bei der Pythonversion der For-Schleife eigentlich um eine foreach-Schleife. Auch das ist eine Spitzfindigkeit. | ||
+ | </ | ||
+ | |||
+ | Wir können in range() auch einen Anfangswert übergeben: | ||
+ | |||
+ | <file python array_03.py> | ||
+ | autos = [" | ||
+ | anzahl_autos = len(autos) | ||
+ | |||
+ | for i in range(2,4): | ||
+ | print(autos[i]) | ||
+ | </ | ||
+ | |||
+ | Der letzte Code gibt nur die Array-Elemente 3 (autos[2]) und 4 (autos[3]) aus. | ||
+ | |||
+ | ==== Aufgaben ==== | ||
+ | |||
+ | === Aufgabe 1 === | ||
+ | Schreibe ein Programm, welches alle Elemente (mindestens 10) eines Arrays aus Integern aufsummiert. | ||
+ | |||
+ | <file python loesung01.py> | ||
+ | notenspiegel = [1, | ||
+ | num_students = 0 | ||
+ | |||
+ | for i in range(16): | ||
+ | num_students = num_students + notenspiegel[i] | ||
+ | </ | ||
+ | |||
+ | === Aufgabe 2 === | ||
+ | Eine Klausuraufgabe lautete: " | ||
+ | |||
+ | Mohamed hat die Aufgabe als einziger richtig gelöst - allerdings ist der Code überhaupt nicht schön, weil ihm noch keine Arrays zur Verfügung standen. | ||
+ | |||
+ | <file python mohamed.py> | ||
+ | l = 1*0+2*1+2*2+1*3+1*4+3*5+1*6+2*7+3*8+4*9+1*10+2*11+1*12+1*13+1*14+1*15 | ||
+ | m = 1+2+2+1+1+3+1+2+3+4+1+2+1+1+1+1 | ||
+ | n = str(l/m) | ||
+ | k = 1*0+2*1+2*2+1*3+1*4+3*5+1 | ||
+ | p = 1+2+2+1+1+3+1 | ||
+ | q = "Der Durchschnitt beträgt:" | ||
+ | h = str(k/p) | ||
+ | print(q) | ||
+ | print(h) | ||
+ | </ | ||
+ | |||
+ | Löse die Aufgabe, indem du Arrays verwendest. Nutze einmal dafür die dir schon bekannte While-Schleife und einmal die neue For-Schleife, | ||
+ | |||
+ | Tipp: Speichere die Anzahl der Klausuren in einem Array mit 16 Elementen. Der Index repräsentiert dann einfach die Anzahl der Punkte. Welche weiteren Vorteile hat das Verfahren mit den Arrays für die Lehrkraft im Vergleich zu Mohameds Lösung? | ||
+ | |||
+ | <file python loesung02.py> | ||
+ | notenspiegel = [1, | ||
+ | num_students = 0 | ||
+ | num_students_failed = 0 | ||
+ | sum_grades = 0 | ||
+ | |||
+ | for i in range(16): | ||
+ | num_students = num_students + notenspiegel[i] | ||
+ | sum_grades = sum_grades + (notenspiegel[i] * i) | ||
+ | |||
+ | for i in range(4): | ||
+ | num_students_failed = num_students_failed + notenspiegel[i] | ||
+ | |||
+ | average = round(float(sum_grades/ | ||
+ | failed = round(float(num_students_failed/ | ||
+ | |||
+ | print(" | ||
+ | print(" | ||
+ | </ |