x = 42
name = "Albert Einstein"
Variablen haben unterschiedliche **Datentypen:**
* `x` ist ein **Integer** (kurz **int**), also eine *ganze Zahl*
* `name` ist ein **String**, also //Text//. Dafür werden Anführungs- & Schlusszeichen (`'` oder `"`) verwendet.
while BEDINGUNG:
# Codeblock der ausgeführt wird, solange (while)
# Bedingung erfüllt ist.
# Nachdem Codeblock komplett ausgeführt wurde,
# wird Bedingung wieder neu überprüft.
Alle Zeilen Code, die zum Codeblock der Schleife gehören werden //gleichmässig eingerückt//. Verwende dazu die //Tab//-Taste oben links (s. [[user:hof:copypaste#text-editing|Tastaturbefehle]].
if BEDINGUNG:
# Codeblock der ausgeführt wird,
# falls (if) Bedingung erfüllt ist
else:
# Codeblock der ausgeführt wird,
# der ansonsten ausgeführt wird,
# falls also Bedingung NICHT erfüllt ist
Auch hier muss auf eine korrekte Einrückung geachtet werden.
x = int(input("Gib eine Zahl ein")) # Aufforderung, etwas einzugeben, wird sichergestellt, dass Zahl ist, dann in Variable x gespeichert
s = str(input("Gib einen String ein")) # wie oben, wird aber als Text (String) gespeichert
print(x) # der Wert der Variablen x wird in Konsole ausgegeben
# single line comment
"""
multi
line
comment
"""
++++Leitfragen|
* Warum sollte man seinem Code Kommentare anfügen?
* Wann braucht man `#` und wann `"""` für Kommentare?
++++
==== Vergleichsoperatoren ====
Für Bedingungen in Verzweigungen und Schleifen benötigen wir **Vergleichsoperatoren:**
^ Operator ^ Erklärung ^
| `x == 4` | `x` ist Zahl und hat Wert von genau 4 |
| `s == "Hallo"` | `s` ist String und hat genau den Inhalt "Hallo" |
| `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 |
| `5 <= x <= 10` | `x` ist Zahl zwischen 5 und 10 (inklusive) |
++++Leitfragen|
* Bisher nicht gebraucht haben wir den `!=` Operator. Wozu ist dieser nützlich?
* Mache ein konkretes Beispiel für den `!=` Operator.
* Was ist der Unterschied zwischen dem `>` und dem `>=` Operator?
++++
==== Mathematische Operationen ====
Neben dem `+` gibt es eine Vielzahl an **mathematischen Operatoren**:
^ Funktion ^ Python-Code ^ Resultat ^
| Addition | `5+2` | `7` |
| Subtraktion | `5-2` | `3` |
| Multiplikation | `5*2` | `10` |
| Division (Nachkommastellen) | `5/2` | `2.5` |
| Ganzzahldivision | `5//2` | `2` |
| Hoch (z.B. 5 hoch 2) | `5**2` | `25` |
| Wurzel (z.B. Wurzel von 2, sqrt für square-root) | `sqrt(2)` | `1.4142135...` |
| Modulo (Rest der Ganzzahl-Division) | `5%2`| `1` |
**Achtung:** Für `sqrt` muss noch das Mathe-Modul importiert werden:
from math import *
++++Leitfragen|
* Wie rechnet man hoch (Potenzen)?
* Was ist der Unterschied zwischen `/` und `//`?
* Was macht der Modulo Operator `%`? Wozu ist dieser nützlich?
++++
==== Strings (Zeichenketten) ====
Strings werden bekanntlich mit Anführungs- und Schlusszeichen geschriebene, zum Beispiel:
name = "Albert Einstein" # Ob doppeltes Anfuehrungs-/Schlusszeichen oder....
job = 'Physicist' # ... einfaches spielt keine Regel. In einem String darf man einfach nicht mischen.
Oft möchte man mehrere Strings und Zahlen zu einem einzelnen String kombinieren. Einzelne Strings können mit `+` zusammengefügt werden. Möchte man eine Zahl-Variable `x` an einen String anfügen, so muss man diese zuerst in einen String umwandeln: `str(x)`. Ein String, der aus mehreren einzelnen Strings und Zahlen zusammengesetzt wurde, nennt man einen **formatierten String**. Wird der String mit print ausgegeben, so spricht man von einer **formatierten Ausgabe**. Beispiel:
if BEDINGUNG:
# Codeblock der ausgeführt wird,
# falls (if) Bedingung erfüllt (True) ist
else:
# Codeblock der ausgeführt wird,
# der ansonsten ausgeführt wird,
# falls also Bedingung NICHT erfüllt ist (False)
Diese sind sehr praktisch, wenn man im Code zwischen **zwei verschiedenen Fällen** unterscheiden will.
Gibt es aber **drei oder mehr Fälle**, muss man if-else-Verzweigungen ineinander verschachteln, wie zum Beispiel in der Schnaps, Bier & Sirup Aufgabe. Dadurch wird der Code sehr schnell unübersichtlich und fehleranfällig. Es ist dann besser, eine **if-elif-else-Verzweigung** zu programmieren, da man mit dieser **beliebig viele Fälle** unterscheiden kann:
if BEDINGUNG1:
# Code, falls BEDINGUNG1 erfüllt ist.
elif BEDINGUNG2:
# Code, falls BEDINGUNG2 erfüllt ist, aber nicht BEDINGUNG1.
else:
# Code, falls keine der Bedingungen erfüllt ist.
Bemerkungen:
* Man kann **beliebig viele** elif-Befehle hintereinander schalten.
* Falls die Bedingung bei //if// oder einem //elif// erfüllt ist, werden alle darauffolgenden //elif//s gar **nicht mehr überprüft**.
==== Aufgaben B ====
**Vorwissen:** [[#python_grundlagen|Weitere Grundlagen]]
=== Aufgabe B1 ===
Python ist super im rechnen und macht jeden Taschenrechner vergessen. Studiere das folgende kurze Kapitel zu den [[#mathematische_operationen|mathematischen Operationen]], welches eine Übersicht über die wichtigsten mathematischen Rechenoperationen beinhaltet.
Berechne mit Python und gib das Resultat aus:
- Addiere $7777$ und $8888$
- Subtrahiere $27312$ von $101432$
- Wie oft kommt $29$ in $1447$ vor?
- Ist $1764$ eine Quadratzahl oder nicht? Beispiel für Quadratzahlen: $49$, weil $7^2 = 49$
x den Wert 7 zu. Verändere nun die Variable nacheinander wie folgt:
my_age_in_years = 14
Berechne nun das Alter in Tagen, Stunden und Sekunden.
Effekte wie Schaltjahre oder Schaltsekunden musst du bei der Berechnung nicht berücksichtigen.
Jeder Wert soll in einer Variablen mit passendem Namen, z.B. my_age_in_seconds gespeichert werden. Gib nun die berechneten Werte in formatierten Strings als Sätze aus, z.B.:
Wichtig! Ändert man nun den Wert von my_age_in_years, so müssen sich alle daraus berechneten Werte entsprechend anpassen!
Beispiel: Werden 23 und 5 eingegeben, so ist die Ausgabe: "23 : 5 = 4 Rest 3"
while-Schleife.
Programmiere die Schnaps, Bier & Sirup Aufgabe mit einer if-elif-else-Verzweigung.
Die Turtle zeichnet dann die entsprechende Figur. Vermeide Code-Repetitionen, verwende stattdessen Schleifen!
Wird etwas anderes eingegeben, so soll eine der folgenden Varianten zum Zug kommen (entscheide selbst):
import random # schreibe dies ganz oben in deinem Code
...
x = random.randint(0,10) # wählt zufällig eine Zahl aus den Zahlen 0,1,2,3,...,9,10 aus
...
== Schritt 3 ==
Erweitere nun dein Spiel wie folgt: Insgesamt sollen 10 Runden gespielt werden, wobei in jeder Runde eine Zufallsaufgabe generiert wird (wie in Schritt 2). Es soll mitgezählt werden, wie viele Aufgaben richtig gelöst wurden. Am Schluss soll der Spieler eine entsprechende Rückmeldung erhalten, z.B.:
''Du hast 7 von 10 Aufgaben richtig gelöst.''
== Schritt 4 ==
Gleich wie Schritt 3, die Rückmeldung soll aber erweitert werden. Je nach erreichter Anzahl Punkte soll eine andere Meldung erscheinen:
|**Erreichte Punkte**|**Meldung**|
|10|Perfekt, du hast alle Aufgaben richtig gelöst!|
|8-9|Sehr gut, du hast fast alle Aufgaben richtig gelöst!|
|6-7|Nicht schlecht, du hast mehr als die Hälfte der Aufgaben richtig gelöst!|
|5|Genügend, du hast die Häfte der Aufgaben richtig gelöst|
|1-4|Ungenügend, du hast leider weniger als die Hälfte der Aufgaben richtig gelöst|
|0|Leider hast du alle Aufgaben falsch gelöst. Zurück in die Primarschule!|