Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
gf_informatik:python_zusammenfassung [2023-09-25 05:38] – hof | gf_informatik:python_zusammenfassung [2023-09-25 07:14] (aktuell) – [Operationen mit Zahlen] hof | ||
---|---|---|---|
Zeile 4: | Zeile 4: | ||
## The Big Six | ## The Big Six | ||
+ | ### Variablen | ||
+ | |||
+ | In **Variablen** werden Werte gespeichert, | ||
+ | |||
+ | Variablen kannst du ganz einfach deklarieren: | ||
+ | |||
+ | Variablen haben jeweils einen **Typ**: | ||
+ | |||
+ | * **Zahlen**: Mit Zahlen kann man rechnen. | ||
+ | * Ein Text wird in der Informatik als **String** bezeichnet. In Python müssen Strings immer in Anführungs- und Schlusszeichen geschrieben werden. Zahlen sind keine Strings und benötigen deshalb keine Anführungs- und Schlusszeichen. Natürlich kann man mit Strings nicht rechnen. | ||
+ | |||
+ | **Beispiele: | ||
+ | |||
+ | <code python> | ||
+ | x = 7 # Zahl | ||
+ | |||
+ | a = " | ||
+ | </ | ||
+ | #### Operationen mit Zahlen | ||
+ | Betrachte als Beispiel den folgenden Code: | ||
+ | |||
+ | <code python> | ||
+ | x = 7 | ||
+ | |||
+ | y = x*x | ||
+ | |||
+ | print(y) | ||
+ | </ | ||
+ | |||
+ | Im ersten Schritte legen wir eine Variable mit Namen `x` fest und weisen ihr den Wert 7 zu. Danach quadrieren wir die Zahl und speichern diesen Wert in einer zweiten Variable mit Namen `y`. Nun geben wir in der Konsole den Wert der Variable `y` (also 49) aus. Die **Konsole** (auch **Terminal**) ist das Fenster unterhalb des Code-Fensters. | ||
+ | Um etwas in der Konsole auszugeben, schreiben wir dies in die `print(...)` Funktion. | ||
+ | |||
+ | Führe diesen Code (selber schreiben, nicht copy-paste!) nun selbst aus. Weise der Variablen `x` nun einen anderen Wert zu. Damit wird dann auch der Wert der Variablen `y` verändert und dementsprechend sieht die Ausgabe im Terminal anders aus. | ||
+ | |||
+ | Einige wichtige **mathematischen Operatoren** sind: | ||
+ | |||
+ | ^ Funktion ^ Python-Code ^ Resultat ^ | ||
+ | | Addition | `7+3` | `10` | | ||
+ | | Subtraktion | `7-3` | `4` | | ||
+ | | Multiplikation | `7*3` | `21` | | ||
+ | | Division (Nachkommastellen) | `7/3` | `2.3333333333...` | | ||
+ | | Ganzzahldivision | `7//3` | `2` | | ||
+ | | Hoch (z.B. 2 hoch 5) | `2**5` | `32` | | ||
+ | | Wurzel (z.B. Wurzel von 2, sqrt für square-root) | `sqrt(2)` | `1.4142135...` | | ||
+ | | Modulo (Rest der Ganzzahl-Division) | `7%3`| `1` | | ||
+ | |||
+ | #### Operationen mit Strings | ||
+ | |||
+ | ^ Funktion | ||
+ | | Länge | ||
+ | | Buchstabe auslesen | ||
+ | | Aneinanderreihen | ||
+ | | _Multiplikation_ | ||
+ | |||
### Verzweigung | ### Verzweigung | ||
Zeile 27: | Zeile 81: | ||
</ | </ | ||
- | Gibt es aber **drei oder mehr Fälle**, muss man `if`-`else`-Verzweigungen ineinander verschachteln. Dadurch wird der Code unübersichtlich und fehleranfällig. Es ist dann besser, mit `elif` die weiteren | + | Gibt es aber **drei oder mehr Fälle**, muss man `if`-`else`-Verzweigungen ineinander verschachteln. Dadurch wird der Code unübersichtlich und fehleranfällig. Es ist dann besser, mit `elif` die weiteren |
<code python> | <code python> | ||
if < | if < | ||
Zeile 40: | Zeile 94: | ||
* Es gibt genau eine `if`-Anweisung! | * Es gibt genau eine `if`-Anweisung! | ||
- | * Man kann **beliebig viele** (auch null) `elif`-Anweisungegn | + | * Man kann **beliebig viele** (auch null) `elif`-Anweisungen |
* Es gibt keine oder eine `else`-Anweisung. | * Es gibt keine oder eine `else`-Anweisung. | ||
* Falls die Bedingung bei `if` oder einem `elif` erfüllt ist, werden alle darauffolgenden `elif` gar **nicht mehr überprüft**. | * Falls die Bedingung bei `if` oder einem `elif` erfüllt ist, werden alle darauffolgenden `elif` gar **nicht mehr überprüft**. | ||
Zeile 57: | Zeile 111: | ||
# sobald die < | # sobald die < | ||
</ | </ | ||
+ | |||
+ | ### Bedingungen | ||
+ | |||
+ | Sowohl in Schleifen wie auch in Verzweigungen werden Bedingungen überprüft. Bedingungen sind Code-Ausdrücke, | ||
+ | |||
+ | Die einfachste Bedingung ist also gerade so ein Wahrheitswert. Eine `while True`-Schleife wird nie regulär beendet, wir verwenden Sie für einen Programmteil der nicht verlassen werden sollen (z.B. in der Robotik): | ||
+ | |||
+ | <code python> | ||
+ | while True: | ||
+ | if button_a.is_pressed(): | ||
+ | display.show(Image.SMILE) | ||
+ | </ | ||
+ | |||
+ | #### Vergleichs-Operatoren | ||
+ | |||
+ | Für komplexere Bedingungen in Verzweigungen und Schleifen benötigen wir **Vergleichsoperatoren: | ||
+ | |||
+ | ^ Operator ^ Erklärung ^ | ||
+ | | `x == 4` | x ist Zahl und hat Wert von genau 4 | | ||
+ | | `s == " | ||
+ | | `x != 4` | x ist NICHT eine Zahl vom Wert (Ungleich-Operator)| | ||
+ | | `x > 5` | x ist Zahl grösser als 5 | | ||
+ | | `x >= 5` | x ist Zahl grösser gleich 5 | | ||
+ | | `x < 5` | x ist Zahl kleiner als 5 | | ||
+ | | `x <= 5` | x ist Zahl kleiner gleich 5 | | ||
+ | |||
+ | #### Implizite Umwandlung in Wahrheitswert | ||
+ | |||
+ | Python kann alle Werte irgendwie in einen Wahrheitswert umwandeln: | ||
+ | * `False` sind: | ||
+ | * die Zahl `0` oder `0.0` | ||
+ | * der leere String `"" | ||
+ | * `None` | ||
+ | * `False` selbst | ||
+ | * `True` ist alles andere: | ||
+ | * alle anderen Zahlen ausser 0 | ||
+ | * alle nicht-leeren Strings und Listen | ||
+ | * `True` selbst | ||
+ | * alle anderen Objekte | ||
+ | |||
+ | #### Logik-Operatoren | ||
+ | |||
+ | Mit **Logikoperatoren** können mehrere Aussagen **verknüpft** (`and`, `or`) oder eine Aussage **negiert** (`not`) werden: | ||
+ | ^ Operator ^ Erklährung ^ | ||
+ | | `A and B` | ist `True` nur falls beide Aussagen `A` und `B` `True` sind | | ||
+ | | `A or B` | ist `True` nur falls mindestens eine der Aussagen `A` und `B` `True` ist | | ||
+ | | `not A` | negiert Aussage `A` | | ||
+ | |||
+ | ### Listen | ||
+ | |||
+ | Eine Liste ist eine Sequenz von Werten, die in einer einzigen Variable gespeichert werden. | ||
+ | |||
+ | Eine Liste erstellt man wie folgt: | ||
+ | <code python> | ||
+ | L = [' | ||
+ | </ | ||
+ | Eine Liste besteht aus **Elementen**, | ||
+ | |||
+ | Elemente hinten **hinzufügen** kann man mit append: | ||
+ | <code python> | ||
+ | L = [' | ||
+ | L.append(' | ||
+ | </ | ||
+ | |||
+ | Nach dem append-Befehl sieht die Liste wie folgt aus: `[' | ||
+ | <code python> | ||
+ | L.insert(2,' | ||
+ | L.pop(4) # Entfernt das Element mit Index 4 | ||
+ | len(L) # Gibt an, wieviele Elemente sich in der Liste befinden. Diesen Wert kann man z.B. printen oder in einer Variablen speichern | ||
+ | </ | ||
+ | |||
+ | #### Iteration | ||
+ | |||
+ | Iteration bedeutet, alle Elemente einer Liste durchzugehen. Mit einer `while`-Schleife könnte das so aussehen: | ||
+ | <code python> | ||
+ | i = 0 | ||
+ | while i < len(L): | ||
+ | print(L[i]) | ||
+ | i = i + 1 | ||
+ | </ | ||
+ | |||
+ | Noch etwas eleganter geht dasselbe mit einer `for`-Schleife. Dabei wird die Schleifen-Variable (im Beispiel `e`) in jedem Durchgang der Schleife auf das nächste Element der Liste gesetzt. | ||
+ | <code python> | ||
+ | for e in L: | ||
+ | print(e) | ||
+ | </ | ||
+ | ### Funktionen | ||
+ | |||
+ | Eine **Funktion** verpackt ein Stück Code, das wir öfter benötigen. | ||
+ | |||
+ | Die Funktion ist immer wie folgt aufgebaut: | ||
+ | |||
+ | <code python> | ||
+ | def name_der_funktion(PARAMETER): | ||
+ | # CODE DER FUNKTION | ||
+ | return RETURN_WERT # ist optional | ||
+ | </ | ||
+ | |||
+ | Wir verwenden Funktionen schon lange, viele kennst du: `print` und `input`, `random.randint`, | ||
+ | <code python> | ||
+ | digits = [0, 1, 2, 3, 4, 5] | ||
+ | digits.append(6) | ||
+ | |||
+ | message = "Wir haben {0} Ziffern" | ||
+ | </ | ||
+ | |||
+ | Gründe, um Funktionen zu benützen: | ||
+ | * Effizienz: Wiederholung vermeiden, mehrfach benötigten Code nur einmal schreiben. | ||
+ | * Klarheit: Der Name der Funktion dokumentiert, | ||
+ | * Isolation: Eine Funktion bearbeitet nur ihre Argumente, andere Variablen sind tabu! | ||
+ | |||
+ | Vergleich den folgenden Code und entscheide, was klarer ist: | ||
+ | |||
+ | <WRAP group> | ||
+ | <WRAP 45% column> | ||
+ | <code python> | ||
+ | numbers = [58, 100, 2, 24, 34, 34, 41, 46, 49, 45] | ||
+ | |||
+ | count = 0 | ||
+ | for n in numbers: | ||
+ | if n % 5 == 0: | ||
+ | if n % 3 == 0: | ||
+ | count = count + 1 | ||
+ | print(count) | ||
+ | </ | ||
+ | </ | ||
+ | <WRAP 45% column> | ||
+ | <code python> | ||
+ | def is_multiple(number, | ||
+ | return number % factor == 0 | ||
+ | |||
+ | def count_multiples_of(candidates, | ||
+ | count = 0 | ||
+ | for n in candidates: | ||
+ | if is_multiple(n, | ||
+ | count = count + 1 | ||
+ | return count | ||
+ | |||
+ | numbers = [58, 100, 2, 24, 34, 34, 41, 46, 49, 45] | ||
+ | print(count_multiples_of(numbers, | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||