Grundlagen der Programmierung in Python

Zusammenfassung des Materials und Spickzettel

Grundlagen der Programmierung in Python

Programmieren bedeutet, dem Computer Anweisungen zu geben, damit er Aufgaben erledigt. Stell dir vor, du schreibst eine Anleitung für einen Roboter – genau das machen wir mit Code.

Ein Programm ist eine Liste von Befehlen, die der Computer nacheinander ausführt. Ein Computer liest dabei von oben nach unten.

Computer verstehen erstmal nur Nullen und Einsen. Damit wir nicht in dieser komplizierten Maschinensprache schreiben müssen, gibt es Programmiersprachen. Es gibt viele Programmiersprachen. Wir lernen hier Python. Das hat viele Vorteile:

  • Python ist besonders einfach zu lesen und zu schreiben.
  • Python wird viel in der Wissenschaft verwendet.

Python wurde in den 1990er Jahren entwickelt und nach der Komikergruppe Monty Python benannt.

Damit der Computer weiß, was er tun soll, muss unser Python-Code zuerst übersetzt werden. Das macht ein spezielles Programm namens Interpreter (bei anderen Sprachen auch oft Compiler genannt). Der Interpreter liest den Python-Code Zeile für Zeile und führt ihn direkt aus. Dadurch können wir Fehler schneller finden und den Code einfach testen.

Damit der Interpreter das richtig kann, müssen wir uns an Regeln halten. Genau wie eine gesprochene Sprache Vokabeln und Grammatik hat, hat eine Programmiersprache Semantik (die Bedeutung der Wörter) und Syntax (die richtige Verwendung und Reihenfolge der Wörter).

Einführung

Die erste wichtige Funktion ist die print-Funktion.

print("Hallo, Welt")

gibt “Hallo, Welt” in der Konsole aus.

Mit der input-Funktion können wir Zeichenketten aus der Konsole einlesen:

name = input("Was ist dein Name?")

Variablen und Datentypen

Variablen sind dafür da, um Daten zu speichern. Du kannst dir Variablen wie Behälter speichern, in denen du Werte ablegen und später wieder abrufen kannst.

In Python erstellst du eine Variable einfach, indem du einen Namen festlegst und ihr einen Wert gibst. Dafür schreibst du einen Namen, dann ein Gleichheitszeichen = und dann den Wert. Das sieht dann so aus:

name = "Ada"
geburtsjahr = 1815
groesse_ihres_computers = 4.5 # Größe in Metern
programmiererfahrung = True

Damit der Computer weiß, wie er mit der Variable umgehen soll, haben Variablen in Python (und allen anderen Programmiersprachen) unterschiedliche Datentypen.

Zeichenketten, Strings (str)
  • Ein String ist eine Kette aus Buchstaben, Zahlen und Symbolen.
  • Strings werden in Anführungszeichen gesetzt, entweder doppelte " " oder einfache ' '.
Ganze Zahlen, Integers (int)
  • Ein Integer speichert eine ganze Zahl: wie beispielsweise das Geburtsjahr oder Alter.
Gleitkommazahlen, Floating-Point-Zahlen (float)
  • Floating-Point-Zahlen sind Zahlen mit Dezimalstellen, z. B. 4.5 oder 3.14.
Wahrheitswerte (bool)
  • Wahrheitswerte sind entweder True (Wahr) oder False (Falsch).
Listen
  • Listen sind geordnete Sammlungen von Werten, die verschiedenartige Datentypen enthalten können.
  • Listen werden mit eckigen Klammern [] definiert.
zahlen = [1, 2, 3, 4]
namen = ["Ada Lovelace", "Alan Turing", "Mary Tsingou"]
gemischt = [1, "Hallo", True]
Tupel
  • Tupel sind ähnlich wie Listen, aber unveränderlich, das heißt, man kann die Werte nach der Erstellung nicht mehr ändern.
  • Tupel werden mit runden Klammern () definiert.
    punkt = (10,20)
    
    Mengen, Sets
  • Mengen sind ungeordnete Sammlungen von eindeutigen Elementen.
  • Du kannst Sets verwenden, um doppelte Werte zu entfernen oder Mengenoperationen durchzuführen (wie Schnittmenge, Vereinigung).
  • Sets werden mit geschweiften Klammern {} definiert, oder mit dem set()-Konstruktor.
    zahlen = {1,2,3,4,4}
    
Wörterbücher
  • Wörterbücher speichern Daten in Schlüssel-Wert-Paaren.
  • Sie sind sehr praktisch, um Daten nach einem Schlüssel zu organisieren.
  • Wörterbücher werden mit geschweiften Klammern {} definiert, wobei Schlüssel und Werte durch Doppelpunkte getrennt sind.
person = {
    "name": "Ada",
    "geburtsjahr": 1815,
    "programmiersprachen": ["Difference Engine", "Ada"]
}

Wir müssen dem Computer im Gegensatz zu vielen anderen Sprachen nicht mitteilen, um welchen Datentyp es sich handelt. Er erkennt das automatisch. Du kannst aber auch optional Datentypen angeben, das nennt man Typannotationen und ist nützlich, um im Editor Fehler zu finden.

name: str = "Ada"
geburtsjahr: int = 1815
groesse_ihres_computers: float = 4.5 # Größe in Metern
programmiererfahrung: bool = True

Typische Operatoren für die Datentypen

Strings
Operator Beschreibung Beispiel Ergebnis
+ Verketten (zusammenfügen) "Hallo" + " Welt" "Hallo Welt"
* Wiederholen "Ha" * 3 "HaHaHa"
in Teilstring prüfen "lo" in "Hallo" True
len() Länge der Zeichenkette len("Python") 6
[] Index-Zugriff "Hallo"[1] "a"
Integer und Floats
Operator Beschreibung Beispiel Ergebnis
+ Addition 5 + 3 8
- Subtraktion 5 - 2 3
* Multiplikation 4 * 2 8
/ Division (float) 5 / 2 2.5
// Ganzzahlige Division 5 // 2 2
% Modulo (Rest bei Division) 5 % 2 1
** Potenzieren 2 ** 3 8
== Gleichheit prüfen 5 == 5 True
> < Größer, kleiner 3 < 4 True
Wahrheitswerte
Operator Beschreibung Beispiel Ergebnis
and Logisches UND True and False False
or Logisches ODER True or False True
not Logische Negation not True False
== Gleichheit prüfen 5 == 5 True
!= Ungleichheit prüfen 3 != 4 True
Listen
Befehl / Funktion Beschreibung Beispiel Ergebnis / Effekt
+ Listen zusammenfügen [1, 2] + [3, 4] [1, 2, 3, 4]
* Wiederholen [1] * 3 [1, 1, 1]
in Prüfen, ob Element enthalten ist 3 in [1, 2, 3] True
len(liste) Länge der Liste len([1, 2, 3]) 3
liste[0] Zugriff auf ein Element über den Index liste[0] bei [1, 2, 3] 1
liste[1:3] Slicing: Teil der Liste von Index 1 bis 2 [1, 2, 3, 4][1:3] [2, 3]
liste.append(9) Fügt 9 am Ende der Liste hinzu [1, 2, 3].append(9) [1, 2, 3, 9]
liste.insert(2, 25) Fügt 25 an Index 2 ein [1, 2, 3].insert(2, 25) [1, 2, 25, 3]
liste.sort() Sortiert die Liste (verändert sie direkt) [3, 1, 2].sort() [1, 2, 3]
liste.reverse() Dreht die Reihenfolge der Liste um [1, 2, 3].reverse() [3, 2, 1]
liste.remove(2) Entfernt das erste Vorkommen von 2 [1, 2, 2, 3].remove(2) [1, 2, 3]
liste.pop() Entfernt und gibt das letzte Element zurück [1, 2, 3].pop() Rückgabe: 3, Liste: [1, 2]
liste[0] = 32 Ersetzt das Element an Index 0 durch 32 liste = [1, 2]; liste[0] = 32 [32, 2]
Tupel
Operator / Funktion Beschreibung Beispiel Ergebnis
[] Zugriff auf Elemente tupel[1] Wert an Index 1
in Element enthalten? 2 in (1, 2, 3) True
len() Länge len((1, 2)) 2
+ Verketten (1, 2) + (3,) (1, 2, 3)
Mengen

|Operator / Methode|Beschreibung|Beispiel|Ergebnis| |—|—|—|—| |.add()|Element hinzufügen|s.add(4)|{1, 2, 3, 4}| |.remove()|Element entfernen|s.remove(2)|{1, 3} (wenn 2 enthalten war)| |in|Mitglied testen|3 in s|True| |\||Vereinigung (Union)|{1, 2}| |&|Schnittmenge (Intersection)|{1, 2} & {2, 3}|{2}| |-|Differenz|{1, 2, 3} - {2}|{1, 3}`|

Wörterbücher
Operator / Methode Beschreibung Beispiel Ergebnis
[] Zugriff auf Wert person["name"] "Ada"
.get() Sicherer Zugriff person.get("alter", "unbekannt") "unbekannt" (wenn fehlt)
.keys() Liste der Schlüssel person.keys() dict_keys([...])
.values() Liste der Werte person.values() dict_values([...])
.items() Schlüssel-Wert-Paare person.items() dict_items([...])
in Prüfen, ob Schlüssel existiert "name" in person True

Datentypen umwandeln

Wir können Datentypen umwandeln. Das ist besonders wichtig für die input-Funktion. Diese gibt einen String zurück. Wenn wir aber beispielsweise eine Zahl einlesen wollen, müssen wir diese umwandeln, wenn wir mit ihr Rechenoperationen durchführen können. Hier ist eine Liste der Datenumwandlungen:

Funktion Wandelt um zu Beispiel Ergebnis / Erklärung
str(x) Zeichenkette str(123) "123" (aus Zahl wird Text)
int(x) Ganze Zahl int("42") 42 (aus String wird Zahl)
float(x) Gleitkommazahl float("3.14") 3.14 (aus String wird float)
bool(x) Wahrheitswert bool("False") False (leerer String ist falsch)
list(x) Liste list("abc") ['a', 'b', 'c']
tuple(x) Tupel tuple([1, 2]) (1, 2)
set(x) Menge set([1, 2, 2, 3]) {1, 2, 3} (Duplikate entfernt)
dict(x) Wörterbuch dict([("a", 1), ("b", 2)]) {"a": 1, "b": 2}

Bedingungen

Nun wollen wir lernen, wie ein Python-Programm Entscheidungen treffen kann. Dies passiert durch die Verwendung von Bedingungen und Kontrollstrukturen. Bedingungen nehmen dabei immer Wahrheitswerte an, sind also entweder Trueoder False. Ein Beispiel für eine Bedingung ist k > 100. Diese Bedingung überprüft, ob die vorher definierte Variable k größer als 100 ist. Es ist dabei wichtig, dass k den Datentyp einer Zahl hat (Integer oder Float). Dies sieht folgendermaßen aus:

if Bedingung:
	Befehl1
	Befehl2
	...

Sowohl der Doppelpunkt als auch die Einrückung mit einem Tab sind dabei sehr wichtig if fragt dabei ab, ob die Bedingung wahr ist. Wenn ja, führt es die Befehle aus. Mit elif können wir in der gleichen Abfrage eine zweite Bedingung stellen. Mit else können wir sagen, welche Befehle ausgeführt werden sollen, wenn keine der vorigen Bedingungen zutrifft:

if Bedingung1:
	Befehl1
elif Bedingung2:
	Befehl2
else:
	Befehl3

Schleifen

Wenn man Dinge wiederholt erledigen will, braucht man Schleifen. Eine Schleife wiederholt Befehle, solange eine bestimmte Bedingung erfüllt ist.

while-Schleifen

Mit der while-Schleife kannst du Code wiederholt ausführen, solange eine Bedingung wahr ist. Dies sieht folgendermaßen aus:

while Bedingung:
	Befehl1
else:
	Befehl2

Manchmal möchte man eine Schleife vorzeitig beenden, wenn eine bestimmte Bedingung erfüllt ist. Dafür gibt es in Python das Schlüsselwort break. Manchmal möchte man frühzeitig in den nächsten Schleifendurchlauf springen. Dafür gibt es das Schlüsselwort continue.

i = 0
while True:
    print(i)
    if i == 3:
        break  
    i += 1
for-Schleifen

Eine for-Schleife ist ein anderer Schleifentyp. Sie wird verwendet, um eine Aufgabe für alle Elemente einer Sequenz durchzuführen (z. B. eine Liste, ein range()-Objekt oder eine Zeichenkette). Das ist die Syntax:

for Variable in Sequenz:
	Befehl1
	Befehl2
	...

Mit der Funktion range() kannst du Zahlenbereiche erzeugen, die du z. B. in einer for-Schleife durchlaufen kannst.

|Ausdruck|Beschreibung|Ergebnis von list(range(...))| |—|—|—| |range(5)|Von 0 bis 4 zählen|[0, 1, 2, 3, 4]| |range(2, 6)|Von 2 bis 5 zählen|[2, 3, 4, 5]| |range(1, 10, 2)|Von 1 bis 9, in Zweierschritten|[1, 3, 5, 7, 9]| |range(10, 0, -1)|Rückwärts von 10 bis 1 zählen|[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]| |range(0, 30, 10)|In Zehnerschritten zählen|[0, 10, 20]| range()erzeugt keine Liste, sondern ein Objekt des Typs Range. Man kann es mit list(range())in eine Liste umwandeln.

Funktionen

Manchmal möchte man denselben Code mehrfach verwenden oder eine bestimmte Aufgabe klar abgrenzen. Dafür verwendet man in Python Funktionen Eine Funktion ist ein benannter Block von Code, den man beliebig oft aufrufen kann. Das macht den Code

  • wiederverwendbar
  • übersichtlicher
  • flexibler
def name_der_funktion():
   print("Hallo")

Man kann die Funktion mit ihrem Namen aufrufen: name_der_funktion()

Funktionen können Parameter bekommen – das sind Werte, die du beim Aufruf übergibst:

def begruessung(name):
	print("Hallo", name)

begruessung("Ada")

Wenn du möchtest, dass eine Funktion etwas zurückgibt, verwendest du return:

def quadrat(x: float) -> float:
    return x * x

ergebnis = quadrat(5)

Du kannst das Ergebnis in einer Variable speichern. Die Typannotationen des Parameters und der Funktion (mit -> float) sind nicht notwendig, aber guter Stil. Wenn die Funktion keinreturnverwendet, kann man -> Noneverwenden.

Mehr zu Listen

Manchmal möchtest du Daten in Tabellenform speichern, also in Zeilen und Spalten – zum Beispiel für Spielbretter, Notentabellen oder Matrizen.

matrix = [
    [1, 2, 3], # Zeile 0
    [4, 5, 6], # Zeile 1
    [7, 8, 9]  # Zeile 2
]

Mit zwei eckigen Klammern greifst du zuerst auf die Zeile, dann auf die Spalte zu: matrix[0][1] = 2.

Wichtige Listenfunktionen

Man kann mit so genannten List comprehensions LIsten schnell definieren. Das geht so:

liste = [ausdruck for element in sequenz if bedingung]

Also zum Beispiel

quadratzahlen = [x*x for x in range(5)] # [0,1,4,9,16]
gerade_zahlen = [x for x in range(10) if x%2 == 0] # [0,2,4,6,8]
Teil Bedeutung Beispiel
x for x in ... alle Elemente übernehmen [x for x in liste]
x for x in ... if ... nur bestimmte Elemente übernehmen [x for x in liste if x > 0]
f(x) for x in ... Elemente verändern [x*x for x in liste]
x if ... else y mit Bedingung umwandeln [x if x > 0 else 0 for x in liste]