pr3-python-sose2026/getting_started/getting_started.md

276 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Getting started-Präsentation
- **Die `print()`Funktion:** `print()` ist eine eingebaute Funktion. Sie nimmt Daten entgegen, wandelt sie intern in Text um und sendet sie an den Standard-Ausgabekanal (die Konsole).
- **Automatischer Zeilenumbruch:** Jede `print()`Anweisung schließt standardmäßig mit einem unsichtbaren Zeilenumbruch-Zeichen (`\\n`) ab. Deshalb landen aufeinanderfolgende Aufrufe in neuen Zeilen.
- **Strings (Zeichenketten):** Text muss zwingend in Anführungszeichen (entweder `"..."` oder `'...'`) stehen. Vergisst man diese, sucht Python nach einer Variable mit diesem Namen und wirft einen Fehler (`NameError`).
Python
```
print("Hallo")
print("Python")
```
**Ausgabe:**
Plaintext
```
Hallo
Python
```
## 2. Variablen, Datentypen & Rechenoperationen
### Variablen als Wegweiser
```
name = "Max"
age = 22
height = 1.80
student = True
```
### Die vier wichtigsten Basis-Datentypen:
1. **String (`str`):** Textdaten, z. B. `"Max"`.
2. **Integer (`int`):** Ganzzahlen ohne Komma, z. B. `22`. Kann beliebig groß werden.
3. **Float (`float`):** Gleitkommazahlen, z. B. `1.80`. Wichtig: In der Programmierung wird das englische System mit einem **Punkt** statt einem Komma genutzt!
4. **Boolean (`bool`):** Wahrheitswerte, existieren nur als `True` oder `False`. Wichtig für logische Entscheidungen.
### Dynamische Typisierung
Python erkennt den Datentyp automatisch anhand des zugewiesenen Wertes. Man muss nicht vorab definieren, ob eine Variable ein `int` oder ein `str` ist. Man kann einer Variable später sogar einen völlig anderen Datentyp zuweisen (obwohl man das im Sinne der Lesbarkeit vermeiden sollte).
### Typumwandlung
Manchmal liegen Daten im falschen Typ vor (z. B. eine Zahl, die als Text `"42"` aus einer Datei gelesen wurde). Mit Casting-Funktionen konvertiert man diese manuell:
Python
```
text_zahl = "42"
echte_zahl = int(text_zahl) # Macht aus dem String einen echten Integer
komma_zahl = float("3.14") # Macht aus dem String einen Float
text_wieder = str(100) # Macht aus der Zahl 100 den String "100"
```
### Mathematische Rechenoperationen
Python beherrscht neben den Grundrechenarten mächtige Operatoren für den Programmieralltag:
```
a = 10
b = 3
print("Addition:", a + b) # 13
print("Subtraktion:", a - b) # 7
print("Multiplikation:", a * b) # 30
print("Normale Division:", a / b) # 3.3333333333333335 (Ergebnis ist IMMER ein Float!)
# Fortgeschrittene Operatoren:
print("Ganzzahldivision:", a // b) # 3 (Schneidet alle Kommastellen rigoros ab)
print("Exponent (Hoch-Rechnen):", a ** b) # 1000 (10 hoch 3)
# Der Modulo-Operator (%) - Berechnet den Rest einer Division
print("Modulo Rest:", a % b) # 1 (Weil 10 geteilt durch 3 gleich 3 ist, mit Rest 1)
```
## 3. Arbeiten mit Listen
Listen sind geordnete, veränderbare Sammlungen von Elementen. Sie können beliebig wachsen und schrumpfen.
### Indexierung (Zugriff auf Elemente)
Der Zugriff erfolgt über eckige Klammern `[]`. Python nutzt ein **0-basiertes Indexsystem** (das erste Element hat den Index 0).
Python erlaubt auch **negative Indexierung**, um vom Ende der Liste rückwärts zu zählen.
```
fruechte = ["Apfel", "Banane", "Orange"]
print("Erstes Element:", fruechte[0]) # Apfel
print("Letztes Element:", fruechte[-1]) # Orange (Index -1 ist immer das letzte Element)
```
### Wichtige Listen-Operationen & Methoden
```
fruechte = ["Apfel", "Banane"]
# Element am Ende hinzufügen
fruechte.append("Mango")
# Element an einer exakten Position einschieben (Index, Objekt)
fruechte.insert(1, "Kiwi") # Schiebt "Kiwi" an Index 1, "Banane" rutscht nach hinten
# Element über den Namen löschen (entfernt das erste Vorkommen)
fruechte.remove("Apfel")
# Das letzte Element entfernen und gleichzeitig zurückgeben
letztes = fruechte.pop()
print("Verbleibende Liste:", fruechte)
print("Entferntes Element:", letztes)
```
## 4. Dictionaries
Dictionaries speichern Daten in **Schlüssel-Wert-Paaren (Key-Value)**. Unter der Haube arbeiten sie als *Hash-Tables*, wodurch Abfragen extrem schnell ausgeführt werden unabhängig davon, wie groß das Dictionary ist.
```
auto = {
"marke": "BMW",
"modell": "M3",
"baujahr": 2022
}
# Zugriff über den Schlüssel
print("Modell:", auto["modell"])
```
## 5. Sets & Tuples (Mengen und unveränderliche Listen)
### Tuples (Tupel)
Ein Tuple wird mit runden Klammern geschrieben. Es ist nach der Erstellung **unveränderlich (immutable)**. Elemente können weder hinzugefügt, entfernt noch überschrieben werden.
```
ordnungssystem = ("Nord", "Süd", "Ost", "West")
```
- **Praxisnutzen:** Datensicherheit. Sie garantieren im Code, dass diese Werte fix geschützt sind.
- **Tuple Unpacking:** Man kann Werte eines Tuples elegant in einzelne Variablen entpacken.
```
koordinaten = (49.48, 8.46)
breitengrad, laengengrad = koordinaten
print("Breite:", breitengrad)
print("Länge:", laengengrad)
```
### Sets (Mengen)
Ein Set wird mit geschweiften Klammern geschrieben, enthält aber keine Schlüssel-Wert-Paare, sondern nur einzelne Werte. Ein Set ist **ungeordnet** und enthält **jedes Element garantiert nur einmal** (Duplikate werden automatisch gelöscht).
Python
```
zahlen_set = {5, 1, 2, 2, 3, 3, 3, 4}
print("Set filtert Duplikate:", zahlen_set) # {1, 2, 3, 4, 5}
```
## 6. Logik & Schleifen (Control Flow)
### Wahrheitswert
In Python evaluieren nicht nur Booleans (`True`/`False`) in Bedingungen. Jedes Objekt besitzt eine eingebaute Wahrheit.
- **Als `False` gilt:** Die Zahl `0`, leere Strings `""`, leere Listen `[]`, leere Dictionaries `{}` und das Objekt `None`.
- **Als `True` gilt:** Alles, was Inhalt besitzt oder einen Wert ungleich Null hat.
Python
```
eingabe = "" # Ein leerer String
if not eingabe:
print("Fehler: Es wurde nichts eingegeben!")
```
### Bedingungen (`if`, `elif`, `else`)
Python
```
note = 2
if note == 1:
print("Ausgezeichnet")
elif note == 2 or note == 3:
print("Bestanden")
else:
print("Nicht bestanden")
```
### Schleifen
### For-Schleife
Verwendet man, wenn vorab bekannt ist, wie oft etwas wiederholt werden soll oder wenn eine Kollektion durchlaufen wird.
```
# range(start, stop) läuft vom Start-Wert bis exklusive Stop-Wert
for zaehler in range(1, 4):
print("Durchgang Nummer:", zaehler)
```
### While-Schleife (Bedingungs-gesteuert)
Läuft unendlich lange, solange eine Bedingung auf `True` steht. Wichtig: Die Bedingung muss innerhalb der Schleife irgendwann geändert werden, sonst entsteht eine Endlosschleife.
```
countdown = 3
while countdown > 0:
print("Countdown:", countdown)
countdown = countdown - 1 # Bedingung verändern
```
### Schleifensteuerung: `break` und `continue`
- `continue` bricht den *aktuellen* Durchlauf ab und springt sofort zum nächsten Element.
- `break` bricht die *komplette* Schleife sofort rigoros ab.
```
for nummer in range(1, 6):
if nummer == 3:
continue # Die 3 wird übersprungen
if nummer == 5:
break # Bei 5 wird die komplette Schleife beendet
print("Aktuelle Nummer:", nummer)
```
**Ausgabe:**
```
Aktuelle Nummer: 1
Aktuelle Nummer: 2
Aktuelle Nummer: 4
```
## 7. Funktionen
Funktionen kapseln Code-Blöcke, um Redundanzen zu vermeiden (DRY-Prinzip: Don't Repeat Yourself).
### Parameter mit Standardwerten (Default Parameters)
Man kann Parametern Vorbelegungen mitgeben. Werden diese beim Aufruf weggelassen, greift der Standardwert.
```
def begrüßung(name="Gast"):
print("Hallo,", name)
begrüßung("Julia") # Ausgabe: Hallo, Julia
begrüßung() # Ausgabe: Hallo, Gast
```
### Der fundamentale Unterschied: `print` vs. `return`
Ein häufiger Konzeptfehler:
- `print()` wirft Daten nur visuell für den Menschen auf den Bildschirm. Das Programm kann mit diesem Wert danach **nicht** weiterarbeiten.
- `return` schickt ein echtes Datenobjekt zurück an die Stelle, wo die Funktion aufgerufen wurde. Der Wert kann in einer Variable gespeichert und weiterverwendet werden. Eine Funktion bricht sofort ab, sobald ein `return` erreicht wird.
Python
```
def berechne_quadrat(zahl):
ergebnis = zahl * zahl
return ergebnis # Gibt das mathematische Objekt zurück
# Wert abfangen und in neuer Variable speichern
meine_quadratzahl = berechne_quadrat(5)
# Jetzt können wir mit der Variable weiterrechnen!
print("Das Doppelte der Quadratzahl ist:", meine_quadratzahl * 2) # 50
```