Aussehen
Listen
Vor der Eisdiele hängt eine Tafel, und darauf stehen die Sorten: Schoko, Erdbeere, Vanille, Zitrone, Pistazie. Morgen steht dort etwas anderes. Mango ist über Nacht dazugekommen, Pistazie ist ausverkauft, im Juli sind es dreißig Sorten und im November sechs.

Diese Tafel sollst du in ein Programm schreiben. Mit dem, was du bisher kennst, geht das so:
python
sorte1 = "Schoko"
sorte2 = "Erdbeere"
sorte3 = "Vanille"
print(sorte1)
print(sorte2)
print(sorte3)Das stimmt — genau einen Tag lang. Kommt Mango dazu, musst du eine Variable erfinden und eine Zeile ergänzen. Ist Pistazie ausverkauft, musst du beides wieder herausnehmen. Und wolltest du am Abend wissen, wie viele Sorten es heute waren, müsstest du die Zahl selbst hinschreiben und bei jeder Änderung daran denken.
Das eigentliche Problem sind nicht die vielen Namen. Das Problem ist, dass die Anzahl im Programm steht statt in den Daten: Du müsstest sie beim Schreiben schon kennen — und genau das kannst du nicht. Niemand weiß heute, wie viele Sorten am Donnerstag auf der Tafel stehen.
Deshalb bekommt die ganze Tafel einen einzigen Namen:
python
sorten = ["Schoko", "Erdbeere", "Vanille", "Zitrone", "Pistazie"]Eine Zeile, fünf Sorten. Wenn es morgen sieben sind, ist es immer noch eine Zeile.
Liste
Eine Liste ist ein Wert, der viele Werte enthält. Sie steht in eckigen Klammern, die Werte sind durch Kommas getrennt. Die Reihenfolge bleibt, wie du sie hingeschrieben hast.
Ein einzelnes Element
Bestellen willst du nicht die ganze Tafel, sondern eine Sorte. An einen einzelnen Wert kommst du über seine Nummer in eckigen Klammern:
python
print(sorten[0])
print(sorten[2])Das erste Element hat die Nummer 0, nicht 1. Die Nummer zählt nämlich nicht die Elemente, sondern die Schritte: Sie sagt, an wie vielen Elementen du von oben aus vorbeigehst, bis du bei dem gesuchten stehst. Bei der obersten Sorte gehst du an keiner vorbei, bei der dritten an zweien — deshalb sorten[0] und sorten[2].
Index
Der Index ist die Nummer eines Elements in der Liste. Er beginnt bei 0. Negative Indizes zählen von hinten: sorten[-1] ist das letzte Element.
Aufgabe
Aufgabe
Wie viele sind es?
Die andere Hälfte des Problems war die Anzahl — die Zahl, die du nicht wissen kannst. len() beantwortet genau sie:
python
print(len(sorten))Die Antwort kommt aus der Liste selbst. Trägst du Mango nach, sagt len() beim nächsten Mal eine mehr, ohne dass du im Programm irgendeine Zahl anfassen musst. Genau daran ist die Tafel aus einzelnen Variablen gescheitert.
Fünf Elemente, Indizes 0 bis 4. Der größte gültige Index ist also immer len(...) - 1. Greifst du auf sorten[5] zu, bricht das Programm mit einem IndexError ab — einer der häufigsten Fehler überhaupt, und einer, den du ab jetzt sofort erkennst.
Aufgabe
Ändern, anhängen, entfernen
Eine Tafel, die sich nicht ändern lässt, wäre keine Tafel. Eine Liste lässt sich ändern:
python
sorten[0] = "Stracciatella" # ein Element überschreiben
sorten.append("Mango") # hinten anhängen
sorten.remove("Pistazie") # den Wert "Pistazie" entfernenappend und remove schreibt man hinter die Liste mit einem Punkt dazwischen. Das ist die Punktnotation: Links steht das Ding, rechts das, was es kann. Sie begegnet dir im Kapitel über Objekte wieder — dort erfährst du auch, warum das so aussieht.
Achtung bei remove: Es entfernt nicht den Index, sondern den Wert, und zwar nur den ersten, den es findet. Stünde Vanille zweimal auf der Tafel, löschte sorten.remove("Vanille") die obere; die untere bliebe stehen.
Aufgabe
Eine Liste durchlaufen
Am Tresen fragt jemand, was es heute gibt, und dann wird die ganze Tafel vorgelesen. Dafür brauchst du kein range() mehr. Die Zählschleife kann direkt über die Elemente laufen:
python
for sorte in sorten:
print(sorte)sorte ist bei jedem Durchlauf eine andere Sorte — der Reihe nach, von oben nach unten. Wie viele Durchläufe das sind, fragt die Schleife die Liste selbst. Auch hier musst du die Anzahl nicht wissen, und auch hier stimmt das Programm morgen noch, wenn Mango dazugekommen ist.
Aufgabe
Zwei Elemente tauschen
Die Reihenfolge auf der Tafel ist kein Zufall. Was ganz oben steht, wird häufiger gekauft — die meisten lesen zwei Zeilen und entscheiden sich. Die Eisdiele hat gezählt und weiß jetzt: Zitrone ist die Lieblingssorte, sie soll nach ganz oben. Zitrone steht auf Platz 3, oben steht Schoko. Die beiden sollen die Plätze tauschen.
Das sieht nach zwei Zeilen Arbeit aus:
python
sorten[0] = sorten[3]
sorten[3] = sorten[0]Ist es aber nicht. Führ das Programm aus und sieh dir an, was auf der Tafel steht — die Erklärung dafür findest du selbst.
Aufgabe
Der kurze Weg
Wenn du den Tausch selbst gebaut hast, darfst du ab jetzt auch Pythons Abkürzung dafür benutzen. Sie tut genau dasselbe, nur ohne dass du den Merker hinschreiben musst:
python
sorten[0], sorten[3] = sorten[3], sorten[0]Merk dir diesen Handgriff gut. Das nächste Kapitel besteht fast nur aus ihm.
Auswerten
Für einen Rechner sind Buchstaben auch nur Zahlen. Genauer sind es Binärzahlen. Welche Zahl für welchen Buchstaben steht legt man in ASCII oder moderner UTF-8-Tabellen fest.
Für ASCII kannst du dir dies in Python auch direkt anzeigen lassen:
python
number = ord("A")
print(number)Oder in dieser Simulation auch in Binärschreibweise ausprobieren.
Damit wir aber kleine Zahlen verwenden können, stellen wir uns einfach vor dies hier wären deine aktuellen Leistungen im Informatikunterricht:
python
punkte = [12, 15, 8, 15, 3]Am Ende des Halbjahres willst du wissen, wie du stehst. Wie viele Arbeiten und Tests es werden, wusstest du im September nicht — genau wie bei den Eissorten, und genau wie dort musst du es auch nicht wissen: len() weiß es. Was fehlt, ist die Rechnung.
Summe, Durchschnitt, größter und kleinster Wert folgen dabei alle vier derselben Bauweise, und die ist es wert, sich gemerkt zu werden:
Eine Variable vor der Schleife anlegen, in der Schleife nachbessern.
Beim Summieren addierst du in dieser Variablen auf. Beim Maximum ersetzt du sie, sobald du unterwegs etwas Größeres findest. Beim Minimum genauso, nur andersherum.
Mehr wird hier nicht verraten — der Rest ist deine Aufgabe.
Aufgabe
Noch mehr üben
Aufgabe