Programmieren für Anfänger: Grundlagen mit Python verstehen

Programmiergrundlagen für Anfänger: Verstehe Variablen, Bedingungen, Schleifen und Funktionen mit Python-Beispielen rund um einen kleinen Kiosk.

Lieber schauen? Zum Video
Kurz verstanden.

Das Wichtigste in 30 Sekunden

  • Variablen speichern Werte, Bedingungen wählen einen Ablauf, und Schleifen wiederholen die nötigen Schritte für eine Aufgabe.
  • Funktionen bündeln Berechnungen, während Listen, Dictionaries und Objekte zusammengehörige Daten für deinen Kiosk organisieren.
  • Drei Getränke kosten zunächst 900 Cent; ein einmaliger Bestellrabatt von 50 Cent senkt den Preis auf 850 Cent.
DIE IDEE ALS BILD

So wird aus einer Bestellung ein Ergebnis.

  1. Eingabe

    3 Tassen Tee

    Menge und Einzelpreis liegen als Werte vor.

    3 × 300 Cent
  2. Verarbeitung

    Eine Regel anwenden

    Ab drei Getränken gibt es einmalig 50 Cent Rabatt.

    900 − 50 Cent
  3. Ausgabe

    850 Cent

    Das Programm gibt den berechneten Gesamtpreis zurück.

    Das sind 8,50 €
Das Rechenbeispiel aus dem Artikel: Variablen halten Werte, eine Bedingung prüft die Menge und eine Funktion bündelt die Berechnung.

Zu den wichtigsten Programmiergrundlagen gehören Variablen, Bedingungen, Schleifen und Funktionen. Dieser Einstieg erklärt sie mit Python an einem kleinen Kiosk: Du bestellst drei Tassen Tee zu je drei Euro, und das Programm verarbeitet die Bestellung Schritt für Schritt.

An diesem kleinen Kiosk lassen sich erstaunlich viele Programmierkonzepte verstehen. Du brauchst dafür noch keine eigene App. Es reicht, bei jedem Schritt zu fragen: Welche Information habe ich? Was soll damit passieren? Und wie erkenne ich, ob das Ergebnis stimmt?

Erst die Aufgabe, dann die Schreibweise

Ein Algorithmus beschreibt Schritte zur Lösung einer Aufgabe. Ein Programm setzt solche Abläufe in ausführbare Anweisungen um. Bevor du Python schreibst, kannst du die Bestellung in Alltagssprache formulieren:

  1. Lies die gewünschte Menge.
  2. Ermittle den Einzelpreis.
  3. Multipliziere Menge und Preis.
  4. Ziehe gegebenenfalls einen Rabatt ab.
  5. Zeige den zu zahlenden Betrag.

Eine solche vereinfachte Beschreibung nennt man Pseudocode. Dafür gibt es keine verbindliche Schreibweise. Er hilft dir, über die Lösung nachzudenken, bevor Doppelpunkte und Klammern Aufmerksamkeit verlangen.

Variablen geben Informationen einen Namen

Unser Kiosk beginnt mit drei Angaben:

produkt = "Tee"
menge = 3
einzelpreis = 300

produkt verweist auf einen Text, menge und einzelpreis auf ganze Zahlen. Wir rechnen mit Centbeträgen: 300 bedeutet drei Euro. Das hält die Beispiele übersichtlich.

Eine Variable verbindet einen Namen mit einem Wert. Mit menge = 4 weisen wir dem Namen später einen anderen Wert zu. Gute Namen beschreiben die Aufgabe: einzelpreis hilft mehr als x.

Werte besitzen Datentypen. Text heißt in Python str, eine ganze Zahl int, ein Wahrheitswert bool. Der Text "300" ist deshalb etwas anderes als die Zahl 300. Mit int("300") entsteht eine Zahl, mit der du rechnen kannst. Python legt einen Variablennamen dabei nicht dauerhaft auf einen Typ fest. Python: eingebaute Typen.

Feste Vorgaben schreibt man häufig groß, beispielsweise GRUNDPREIS = 300. Das signalisiert eine Konstante. Python verhindert eine spätere Neuzuweisung dadurch allerdings nicht.

Aus Werten werden Ergebnisse

Operatoren verknüpfen Werte zu Ausdrücken. Das Sternchen multipliziert, ein Pluszeichen addiert. Klammern verdeutlichen die gewünschte Reihenfolge.

gesamt = menge * einzelpreis
print(f"{produkt}: {gesamt} Cent")

Mit den Ausgangswerten erscheint Tee: 900 Cent. Das f vor dem Text kennzeichnet einen formatierten String. In die geschweiften Klammern setzt Python die jeweiligen Werte ein. gesamt bleibt dabei eine Zahl; nur die Nachricht stellt sie als Text dar.

Schon hier hilft eine wichtige Gewohnheit: Sage die Ausgabe voraus, bevor du das Programm ausführst. Du prüfst damit, ob du den Ablauf verstanden hast.

Bedingungen entscheiden, welcher Weg folgt

Ab drei Getränken gibt es 50 Cent Rabatt auf die gesamte Bestellung:

if menge >= 3:
    gesamt -= 50
else:
    print("Normaler Preis")

>= fragt, ob die Menge mindestens drei beträgt. Die eingerückte Anweisung gehört zur Bedingung. Unser Gesamtpreis sinkt von 900 auf 850 Cent. Bei zwei Getränken bleibt der Preis unverändert.

Vergleiche und Zuweisungen unterscheiden sich: menge = 3 speichert einen Wert; menge == 3 vergleicht ihn. Mehrere Voraussetzungen kannst du kombinieren: verfuegbar and guthaben >= gesamt verlangt ein verfügbares Produkt und genügend Geld. or verbindet Alternativen, not kehrt einen Wahrheitswert um. Python: Bedingungen und Kontrollfluss.

Schleifen wiederholen einen Arbeitsschritt

Für drei bestellte Getränke soll der Kiosk drei Zubereitungen melden:

for nummer in range(1, 4):
    print(f"Getränk {nummer} vorbereiten")

Die Zahlen sind 1, 2 und 3. Die obere Grenze von range gehört nicht dazu. Eine for-Schleife eignet sich, wenn du Elemente oder einen Zahlenbereich durchlaufen möchtest.

Eine while-Schleife läuft dagegen, solange eine Bedingung erfüllt ist. Bei while bestand > 0 muss sich der Bestand im Ablauf verändern, wenn die Schleife irgendwann enden soll. Mit break lässt sie sich vorzeitig verlassen; continue überspringt den verbleibenden Teil eines Durchlaufs. Python: Schleifen.

Funktionen machen eine Aufgabe wiederverwendbar

Die Preisregel soll an mehreren Stellen gelten. Dafür geben wir ihr einen eigenen Namen:

def bestellpreis(menge, einzelpreis=300):
    if menge < 0:
        raise ValueError("Die Menge darf nicht negativ sein.")
    gesamt = menge * einzelpreis
    if menge >= 3:
        gesamt -= 50
    return gesamt

print(bestellpreis(3))  # 850

menge und einzelpreis heißen in der Definition Parameter. Die konkrete 3 beim Aufruf ist ein Argument. Der voreingestellte Einzelpreis gilt, wenn du keinen anderen übergibst.

return liefert das Ergebnis an die aufrufende Stelle. print zeigt etwas an. Dieser Unterschied macht Funktionen nützlich: Du kannst den Rückgabewert speichern, weiterverarbeiten oder testen.

Die Funktion nimmt hier bereits passende ganze Zahlen an. Für Texteingaben braucht es einen zusätzlichen Schritt zur Umwandlung und Prüfung. Ein kurzer Name mit einer klaren Aufgabe ist hilfreicher als eine Funktion, die gleichzeitig Eingaben liest, Preise berechnet und Belege druckt.

Wo eine Variable sichtbar ist

Die Variable gesamt innerhalb unserer Funktion gehört zu deren lokalem Gültigkeitsbereich, dem Scope. Außerhalb kannst du nicht einfach auf diesen lokalen Namen zugreifen. Deshalb reichen wir benötigte Daten als Parameter hinein und Ergebnisse mit return wieder hinaus.

Ein if- oder for-Block erzeugt in Python hingegen keinen eigenen lokalen Funktionsbereich. Die genauen Regeln unterscheiden sich zwischen Programmiersprachen. Python: Namensräume und Scope.

Zusammengehörige Funktionen lassen sich außerdem in Module aufteilen. Mit import math verwendest du etwa math.ceil(7 / 3): Für sieben Getränke in Boxen mit je drei Plätzen brauchst du drei Boxen.

Listen und Dictionaries beantworten verschiedene Fragen

Eine Liste speichert mehrere Elemente in einer Reihenfolge. Ein Dictionary verbindet Schlüssel mit Werten:

produkte = ["Tee", "Kaffee", "Saft"]
preise = {"Tee": 300, "Kaffee": 400, "Wasser": 0}

print(produkte[0])    # Tee
print(preise["Tee"])  # 300

Bei der Liste kennst du eine Position. Beim Dictionary kennst du einen Schlüssel. Der erste Listenindex ist null; ein fehlender Index oder ein nicht vorhandener Dictionary-Schlüssel führt beim direkten Zugriff zu einem Fehler. Python: Sammlungen.

Welche Organisation zu welcher Aufgabe passt, zeigt dir der Überblick über Datenstrukturen und ihre Einsatzgebiete.

Wenn ein fehlender Preis erwartet werden kann, hilft get:

preis = preise.get("Kakao")
if preis is None:
    print("Dieses Produkt gibt es nicht.")

None steht hier für einen fehlenden Wert. Prüfe ausdrücklich darauf: Null Cent könnte ein kostenloses Produkt bedeuten.

Auch das Kopieren verdient Aufmerksamkeit. zweite_liste = produkte erzeugt keine unabhängige Liste. Beide Namen verweisen auf dasselbe Objekt. produkte.copy() erzeugt eine neue äußere Liste; enthaltene veränderbare Objekte können weiterhin geteilt sein. Python: Kopien und Referenzen.

Objekte bündeln zusammengehörige Daten

Ein Produkt besitzt einen Namen und einen Preis. Eine Klasse beschreibt, wie solche Objekte aufgebaut sind:

class Produkt:
    def __init__(self, name, preis):
        self.name = name
        self.preis = preis

tee = Produkt("Tee", 300)
print(tee.name)

tee ist eine Instanz. __init__ legt ihren Anfangszustand fest; self bezeichnet die jeweilige Instanz. Eine Methode kann zusätzlich Verhalten anbieten, beispielsweise eine Entnahme aus dem Lager.

Diese Bündelung von Daten und Verhalten gehört zur Kapselung. Ein führender Unterstrich wie _bestand kennzeichnet in Python ein internes Detail, verhindert den Zugriff aber nicht technisch. Python: Klassen.

Unterschiedliche Objekte können dieselbe Fähigkeit anbieten: Barzahlung und Kartenzahlung besitzen jeweils eine Methode bezahlen. Die Kasse verwendet diese gemeinsame Schnittstelle. Das ist Polymorphismus; beim Duck Typing zählt, ob ein Objekt das benötigte Verhalten anbietet.

Fehler verstehen und Erwartungen prüfen

int("drei") lässt sich nicht in eine ganze Zahl umwandeln. Mit try und except ValueError kannst du diesen erwarteten Fehler behandeln und eine verständliche Meldung ausgeben. Ein gezielt behandelter Fehlertyp lässt sichtbar, welches Problem gemeint ist. Python: Fehlerbehandlung.

Liefert eine Rechnung dagegen ein falsches Ergebnis ohne Fehlermeldung, hilft Debugging: Eingaben ansehen, Zwischenwerte prüfen, Erwartung und tatsächlichen Ablauf vergleichen. Ein Debugger kann das Programm dafür anhalten.

Tests halten deine Erwartungen fest:

assert bestellpreis(2) == 600
assert bestellpreis(3) == 850
assert bestellpreis(0) == 0

Die drei Fälle prüfen normalen Preis, Rabattgrenze und leere Bestellung. assert eignet sich hier zur Demonstration; unverzichtbare Eingabeprüfungen gehören in ausdrückliche Bedingungen, denn Assertions können bei optimierter Ausführung entfallen. Python: assert.

Wenn die Aufgaben größer werden

Rekursion bedeutet, dass eine Funktion sich mit einer kleineren Teilaufgabe selbst aufruft. Bei verschachtelten Kategorien kann das hilfreich sein. Sie braucht eine erreichbare Abbruchbedingung; unbegrenzt tiefe Aufrufketten sind in Python nicht möglich.

Funktionen können auch als Werte weitergereicht werden. filter(lambda preis: preis < 400, [200, 350, 500]) wählt Preise unter 400 aus. lambda beschreibt eine kleine Funktion mit einem einzelnen Ausdruck. filter liefert einen Iterator; mit list(...) sammelst du die Ergebnisse.

Eine entfernte Lagerabfrage bringt Wartezeit mit. Asynchroner Code mit async def und await kann diese koordinieren, während andere eingeplante Aufgaben vorankommen. asyncio.create_task plant eine Coroutine ein. Das macht CPU-Arbeit nicht automatisch parallel; blockierende Operationen können weiterhin aufhalten. Python: asynchrone Aufgaben.

Schließlich zählt die Datenmenge. Eine Listensuche muss möglicherweise alle Produkte prüfen. Ein Hashzugriff über einen Dictionary-Schlüssel ist unter üblichen Annahmen im Durchschnitt konstant aufwendig. Big O beschreibt solches Wachstum, keine genaue Laufzeit in Millisekunden. Dabei betrachten wir den Zugriff auf eine bereits aufgebaute Sammlung und vereinfachen die Kosten einzelner Schlüsseloperationen. Python: Dictionaries in CPython.

Für deinen nächsten Schritt reicht eine kleine Änderung am Kiosk: Füge ein weiteres Produkt hinzu, berechne zwei Bestellpositionen und erkläre jeden Zwischenwert. Wenn du nachvollziehen kannst, welche Daten woher kommen und welche Regel sie verändert, beginnen die einzelnen Begriffe zusammenzuarbeiten.

ZUM NACHPRÜFEN

Quellen & Weiterlesen

Die verlinkten Originalquellen bilden die Grundlage der Einordnung. Funktionen und Angebote können sich nach dem angegebenen Stand ändern.

DIE ERKLÄRUNG IN BEWEGUNG

Das Video zum Artikel

Programmieren endlich verstehen

Vorschaubild: Programmieren endlich verstehen

Mit „YouTube-Player laden“ stellst du eine Verbindung zu YouTube her. Starte das Video anschließend mit der Play-Taste im Player. Mehr erfahren

Auf YouTube ansehen ↗
Zur Videoseite
Noch neugierig?

Entdecke mehr Erklärungen zu Programmieren oder abonniere Mila Erklärt auf YouTube.

ZUM WEITERLESEN

Die nächste gute Frage.

Alle Artikel