Listen
Sammlungen von Werten, Indexzugriff und for-in-Schleifen.
Listen sind Sammlungen von Werten in einer bestimmten Reihenfolge. Der folgende Code zeigt ein Beispiel einer Liste in Python:
python["apple", "orange", "pear", "strawberry"]
Man erstellt eine Liste, indem man beliebig viele Werte durch ein Komma getrennt in ein Paar eckiger Klammern schreibt. Die Elemente einer Liste können auch Zahlen oder Wahrheitswerte sein, und sie darf sogar leer sein:
pythona = [1, 42, 15, 777, 15, 9]
b = [True, False, False]
c = []
Die Reihenfolge der Elemente in einer Liste spielt eine Rolle.
Alt Gr + ü (für [) und Alt Gr + ¨ (für ]) eingegeben werden.len(...) und sum(...)
Gegeben seien folgende vier Listen:
pythonli1 = [0,1,2,3,4]
li2 = [5,10,-20]
li3 = ["Alice", "Bob"]
li4 = []
Rufen Sie den Befehl len(...) einmal mit jeder dieser Listen auf und geben Sie das Ergebnis mit print(...) aus. Was macht len(...)?
Wiederholen Sie das Experiment mit sum(...). Was macht dieser Befehl?
Für welche Listen lässt sich sum(...) nicht ausführen, und warum nicht?
mean(...) mit Listen
Definieren Sie eine Funktion mean(...), die für eine beliebige Liste von Zahlen den Mittelwert ausgibt. len() und sum() könnten nützlich sein.
pythondef mean(li):
# Ihr Code hier
nums1 = [0,1,2,3,4]
nums2 = [5,5,5]
nums3 = [0,1,2,13]
print(mean(nums1)) # 2.0
print(mean(nums2)) # 5.0
print(mean(nums3)) # 4.0
pythondef mean(li):
return sum(li) / len(li)
nums1 = [0,1,2,3,4]
nums2 = [5,5,5]
nums3 = [0,1,2,13]
print(mean(nums1))
print(mean(nums2))
print(mean(nums3))
Befehle mit Listen
Welche der vorhergehenden Befehle, die als Argument eine Liste erwarten, sind Funktionen, welche Prozeduren?
| Befehl | Prozedur | Funktion |
|---|---|---|
len() |
||
sum() |
||
mean() |
Index und Existenzüberprüfung
Jedes Element einer Liste hat eine Position, genannt Index. Das erste Element hat den Index 0 (nicht 1!). Mit simpsons[1] greift man auf das zweite Element zu.
pythonsimpsons = ["Homer", "Bart", "Marge", "Lisa"]
print("Hallo, " + simpsons[1])
Man kann mit dieser Schreibweise Elemente auch verändern, und mit dem Schlüsselwort in prüfen, ob ein Element in einer Liste vorkommt:
pythonif "Marge" in simpsons:
print("Marge ist dabei")
Zugriff über den Index
Versuchen Sie zu erraten, welche Ausgaben die print-Anweisungen in folgendem Programm produzieren:
pythonsimpsons = ["Marge", "Bart", "Lisa", "Milhouse"]
farben = ["green", "red", "orange"]
print(farben[2])
print(simpsons[2+4-5])
print(simpsons[-2])
print(farben[0])
print(farben[-1])
print(farben[0] == "green")
print(farben)
| Code | Vermutete Ausgabe |
|---|---|
print(farben[2]) | |
print(simpsons[2+4-5]) | |
print(simpsons[-2]) | |
print(farben[0]) | |
print(farben[-1]) | |
print(farben[0] == "green") | |
print(farben) |
Wie sind negative Indexe, z.B. bei print(simpsons[-2]), zu interpretieren?
Existenz überprüfen
Schreiben Sie ein Programm, das den Benutzer um ein Land (auf Englisch) als Eingabe bittet und sagt, ob es sich um ein afrikanisches Land handelt.
pythonafrica = ["Nigeria", "Ethiopia", "Egypt", "DR Congo", "Tanzania", "South Africa", "Kenya", "Uganda", "Sudan", "Algeria", "Morocco", "Angola", "Ghana", "Mozambique", "Madagascar", "Ivory Coast", "Cameroon", "Niger", "Mali", "Burkina Faso", "Malawi", "Zambia", "Chad", "Somalia", "Senegal", "Zimbabwe", "Guinea", "Rwanda", "Benin", "Burundi", "Tunisia", "South Sudan", "Togo", "Sierra Leone", "Libya", "Republic of the Congo", "Central African Republic", "Liberia", "Mauritania", "Eritrea", "Gambia", "Botswana", "Namibia", "Gabon", "Lesotho", "Guinea-Bissau", "Equatorial Guinea", "Mauritius", "Eswatini", "Djibouti", "Comoros", "Cape Verde", "Western Sahara", "São Tomé and Príncipe", "Seychelles"]
Welche dieser Länder liegen in Afrika?
| Land | In Afrika? |
|---|---|
Martinique | |
Mozambique | |
Togo | |
Tonga | |
Gambia | |
Zambia |
pythoncountry = input("Which country?")
if country in africa:
print(country + " is in Africa")
else:
print(country + " is NOT in Africa")
Listen verändern
Python stellt verschiedene Befehle zur Verfügung, um Listen zu verändern:
| Befehl | Beispiel | Beschreibung |
|---|---|---|
append() | simpsons.append("Milhouse") | Fügt "Milhouse" ganz rechts der Liste hinzu. |
remove() | simpsons.remove("Bart") | Entfernt die erste Kopie von "Bart". |
pop() | simpsons.pop(1) | Entfernt das Element an Index 1 (ohne Index: das letzte). Rückgabewert ist das entfernte Element. |
Listen verändern
Wandeln Sie die Liste ["a","b","c"] in die Liste ["b","d"] um. Verwenden Sie dabei jeden dieser Befehle genau einmal:
liste.append(element)liste.remove(element)liste.pop()
pythonliste = ["a", "b", "c"]
liste.pop()
liste.remove("a")
liste.append("d")
print(liste)
Liste anpassen mit Buzz
Buzz Lightyear versucht, seine Energiestufen in der richtigen Reihenfolge zu organisieren.
pythonenergy_levels = [3, 2, 1]
Buzz möchte sie in aufsteigender Reihenfolge [1, 2, 3] haben. Verwenden Sie Listenoperationen, um die Liste entsprechend zu ändern.
pythonenergy_levels = [3, 2, 1]
energy_levels.append(energy_levels.pop(1))
energy_levels.append(energy_levels.pop(0))
print(energy_levels)
Mr. Incredible und Elastigirl
Mr. Incredible und Elastigirl tracken ihre Erfolge in der Liste wins:
pythonwins = ["Elastigirl", "Mr. Incredible", "Mr. Incredible", "Elastigirl", "Elastigirl", "Mr. Incredible"]
wins.remove("Mr. Incredible")
wins.append("Elastigirl")
wins.append("Elastigirl")
wins.remove("Elastigirl")
wins.remove("Elastigirl")
wins.pop()
print(wins)
Was schreibt das Programm in die Ausgabe? Geben Sie die Lösung als Folge der Grossbuchstaben M (Mr. Incredible) und E (Elastigirl) ein.
Liste für Zaubertrankformel
Hermione Granger verbessert eine Zaubertrankformel. Die Liste soll die vier kleinsten Primzahlen enthalten, hat aber zwei Fehler:
pythonprimes = [1, 2, 3, 4, 7] # Definition der Liste
a) Korrigieren Sie die Fehler in primes nur durch den Zugriff auf die Indizes. Ändern Sie nichts an der ursprünglichen Definition.
b) Schreiben Sie das letzte Element der korrigierten Liste in die Ausgabe.
pythonprimes = [1, 2, 3, 4, 7]
primes.pop(0)
primes[-2] = 5
print(primes[-1])
Die Gästeliste des Prinzen
Der Prinz organisiert einen Ball. Sein Empfangs-Team benötigt ein Programm, das am Eingang die ankommenden Gäste erfasst.
- Das Programm fragt, wie viele Gäste eingeladen wurden (
n). - Es fordert bis zu
nMal auf, den Namen des nächsten Gasts einzugeben. Bei leerer Eingabe bricht es ab. - Es gibt aus, wie viele Gäste nicht gekommen sind («There are X no-shows.»).
- Zum Schluss prüft es, ob
"Cinderella"auf der Gästeliste steht.
pythonn = input("How many guests?")
guests = []
repeat n:
guest = input("Next guest?")
if guest == "":
break
else:
guests.append(guest)
no_shows = n - len(guests)
print("There are " + str(no_shows) + " no-shows.")
if "Cinderella" in guests:
print("Cinderella is among the guests")
else:
print("Cinderella is NOT among the guests")
Last-in-first-out
Jeden Abend macht sich Fritzchen zum Schlafen parat. Er zieht seine Kleider aus und legt sie in den Kleiderschrank. Am Morgen zieht er sie wieder an — in umgekehrter Reihenfolge.
Sie dürfen die Wörter Mütze, Jacke, Socken, Schuhe nur in der ersten Zeile verwenden.
pythonfritz = [ "Socken", "Schuhe", "Jacke", "Mütze" ]
closet = []
print("Fritzchen geht schlafen. Er zieht...")
repeat len(fritz):
item = "Mütze"
print("...seine " + item + " aus")
print("Fritzchen wacht auf. Er zieht...")
repeat len(closet):
item = "Socken"
print("...seine " + item + " an")
pythonfritz = [ "Socken", "Schuhe", "Jacke", "Mütze" ]
closet = []
print("Fritzchen geht schlafen. Er zieht...")
repeat len(fritz):
item = fritz.pop()
print("...seine " + item + " aus")
closet.append(item)
print("Fritzchen wacht auf. Er zieht...")
repeat len(closet):
item = closet.pop()
print("...seine " + item + " an")
fritz.append(item)
Listen mit Index verändern
Folgenden englischen Zeitungsüberschriften sind peinliche Schreibfehler unterlaufen:
Congrats to our Home Run Hitler!
School Two Easy For Kids?
Powered by lithium batteries, you'll always be ready for a sh*t.
Illegally Parked Cars Will Be Fine
Korrigieren Sie die Überschriften mit Indexzugriff auf eine Liste von Buchstaben (list(headline)), und wandeln Sie das Ergebnis mit "".join(letters) zurück.
pythonheadline1 = "Congrats to our Home Run Hitler!"
letters = list(headline1)
letters[-4] = "t"
headline1 = "".join(letters)
headline2 = "School Two Easy For Kids?"
letters = list(headline2)
letters[8] = "o"
headline2 = "".join(letters)
headline4 = "Illegally Parked Cars Will Be Fine"
letters = list(headline4)
letters.append("d")
headline4 = "".join(letters)
print(headline1)
print(headline2)
print(headline4)
Listen mit for-in durchlaufen
Mit der folgenden Schleife können die Elemente einer Liste durchlaufen werden:
pythonsimpsons = ["Homer", "Marge", "Bart", "Lisa"]
for x in simpsons:
print("Hallo", x)
Der Körper dieser Schleife wird für jedes Element einmal ausgeführt. Die Schleifenvariable x bekommt in jeder Iteration den Wert des aktuellen Elements.
Farbige Zeichnung
Was zeichnet dieses Programm?
pythonfrom gturtle import *
makeTurtle()
setPenWidth(20)
colors = ["red", "orange", "yellow", "green", "blue", "indigo", "violet"]
for color in colors:
setPenColor(color)
forward(100)
back(100)
penUp()
right(90)
forward(20)
left(90)
penDown()
Schreiben Sie Ihre Vermutung auf:
Wie heisst die Schleifenvariable dieses Programms?
Listen durchlaufen
Durchlaufen Sie die Liste [0,1,2,10,-5,3] in einer Schleife und geben Sie für jede Zahl x ihr Quadrat x² aus. Tipp: x**2.
pythonfor x in [0,1,2,10,-5,3]:
print(x**2)
Liste mit Gturtle-Argumenten
a) Rufen Sie abwechselnd right() und forward() auf. Übergeben Sie als Winkel der Reihe nach alle Elemente aus:
pythonturns = [180, 30, 120, 30, 150, 240]
Die Geraden sind alle 100 Pixel lang.
b) Dasselbe, aber mit zwei Listen:
pythonturns = [0, 45, 90, 45, 90, 135, 225, 225]
lengths = [90, 63, 63, 90, 90, 126, 90, 126]
Tipp: Hilfsliste i_s = [0, 1, 2, 3, 4, 5, 6, 7].
pythonfrom gturtle import *
turns = [180, 30, 120, 30, 150, 240]
makeTurtle()
for t in turns:
right(t)
forward(100)
pythonfrom gturtle import *
turns = [0, 45, 90, 45, 90, 135, 225, 225]
lengths = [90, 63, 63, 90, 90, 126, 90, 126]
makeTurtle()
i_s = [0, 1, 2, 3, 4, 5, 6, 7]
for i in i_s:
t = turns[i]
l = lengths[i]
right(t)
forward(l)
Listen von Listen durchlaufen
Listen können auch Listen als Elemente haben. So entstehen zweidimensionale Strukturen:
pythondata = [
[False, False, True, True, True, True, False, False],
[False, True, False, False, False, False, True, False],
[True, False, False, True, True, False, False, True],
[True, False, True, False, False, True, False, True],
[True, False, False, False, False, False, False, True],
[True, False, True, False, False, True, False, True],
[True, False, False, False, False, False, False, True],
[False, True, False, False, False, False, True, False],
[False, False, True, True, True, True, False, False],
]
Zeichnen Sie mit setPos(x,y) und dot(10) pro Element einen Punkt: schwarz für True, hellgrau für False. Welches Symbol erkennen Sie?
pythonfrom gturtle import *
makeTurtle()
x = 0
y = 0
for row in data:
y += 1
x = 0
for point in row:
x += 1
if point == True:
setPenColor("black")
else:
setPenColor("lightgray")
setPos(10 * x, 10 * y)
dot(10)
Es wird mit Punkten ein Smiley gemalt.
Anagramme
Zwei Texte sind Anagramme, wenn der eine durch Umstellung der Buchstaben des anderen gebildet werden kann. Schreiben Sie ein Programm, das zwei Zeichenketten auf Anagramm-Eigenschaft prüft.
Testen Sie mit: goal/go, gallery/allergy, moonstarer/astronomer, silent/listen, softest heart/earth forests, the morse code/here come dots, presbyterians/britneyspears.
pythona = input("First word")
b = input("Second word")
aLetters = list(a)
bLetters = list(b)
if len(aLetters) == len(bLetters):
for x in aLetters:
if x in bLetters:
bLetters.remove(x)
if len(bLetters) == 0:
print(a,"and",b,"are anagrams")
else:
print(a,"and",b,"are NOT anagrams")
else:
print(a,"and",b,"are NOT anagrams")
Nachrücken — Ein Gast bei den Simpsons
Die Simpsons sitzen auf der Couch, als es an der Tür läutet. Bart steht auf und ein Gast darf sich auf die Couch setzen.
- Definiere eine Liste
names. - Frage nach dem Namen des Besuchers.
- Frage, an welchem Index er sitzen will.
- Nachdem Bart aufgestanden ist, rücken alle nach rechts, um den Platz freizumachen.
- Der Gast setzt sich; das Programm gibt die neue Liste aus.
Milhouse und 2 ergeben ['Homer', 'Marge', 'Milhouse', 'Lisa', 'Maggie'].pythonnames = ["Homer", "Marge", "Lisa", "Maggie", "Bart"]
guest = input("Wer ist der Gast?")
guestIndex = input("An welchem Index soll er/sie sitzen?")
i = len(names) - 1
repeat len(names) - guestIndex - 1:
names[i] = names[i-1]
i -= 1
names[guestIndex] = guest
print(names)
Kleinste Zahl in Liste finden
Schreiben Sie ein Programm, das für eine Liste mit Zahlen die kleinste Zahl (das Minimum) ausgibt. Setzen Sie minimum zunächst auf das erste Element und durchlaufen Sie die Liste mit einer for-in-Schleife.
pythonzahlen = [1, -7, 42, -13, 81, 7]
minimum = zahlen[0]
for z in zahlen:
if z < minimum:
minimum = z
print(minimum)
Simpsons mit Haustieren
Erstellen Sie eine Liste simpsons. Durchlaufen Sie sie und erstellen Sie eine neue Liste simpsons_with_pets, bei der zusätzlich die Haustiere dazukommen:
- Der Hund (
Dog) kommt direkt nachHomer. - Die Katze (
Cat) kommt direkt nachLisa.
pythonsimpsons = ["Homer", "Marge", "Lisa", "Maggie", "Bart"]
simpsons_with_pets = []
for person in simpsons:
simpsons_with_pets.append(person)
if person == "Homer":
simpsons_with_pets.append("Dog")
elif person == "Lisa":
simpsons_with_pets.append("Cat")
print(simpsons_with_pets)
Fibonacci-Folge generieren
Die Fibonacci-Folge beginnt mit 1, 1, 2, 3, 5, 8, 13, …. Jedes Folgenglied (ab dem dritten) ist die Summe der zwei vorangehenden. Fügen Sie zur Liste fibonacci = [1, 1] die nächsten 18 Fibonacci-Zahlen hinzu.
pythonfibonacci = [1, 1]
repeat 18:
next = fibonacci[-1] + fibonacci[-2]
fibonacci.append(next)
print(fibonacci)
Fibonacci-Spirale visualisieren
Die Fibonacci-Folge kann als Spirale aus Viertelkreisen visualisiert werden. Der Radius des n-ten Viertelkreises ist die n-te Fibonacci-Zahl.
- Definieren Sie einen Befehl
viertelkreis(r)für einen Viertelkreis mit Radiusr. - Zeichnen Sie 90 kleine Striche der Länge
2*pi*r/360und drehen Sie jeweils um 1°. - Durchlaufen Sie die Fibonacci-Liste und rufen Sie
viertelkreis(f)für jede Zahl auf.
Tipp: from math import pi und from gturtle import *.
pythonfrom gturtle import *
from math import *
def viertelkreis(r):
repeat 90:
forward(2 * pi * r / 360)
right(1)
fibonacci = [1, 1]
repeat 18:
next = fibonacci[-1] + fibonacci[-2]
fibonacci.append(next)
speed(-1)
for f in fibonacci:
viertelkreis(f)
Einkaufsliste
Wir schreiben eine einfache Einkaufslisten-App. Startpunkt: shopping_list = [].
a) add(): fragt nach einem Produkt und fügt es hinzu (nicht mehrfach).
b) delete(): fragt nach einem Produkt und entfernt es. Wenn nicht vorhanden: Fehlermeldung «X isn't on the shopping list!».
c) show(): zeigt alle Elemente mit Index an, am Ende «--------------------»; bei leerer Liste «The list is empty».
d) Hauptprogramm: Endlosschleife mit den Kommandos add, delete, show, quit. Unbekanntes Kommando → «Invalid command».
pythonshopping_list = []
def add():
product = input("Which Product?")
if not product in shopping_list:
shopping_list.append(product)
def delete():
product = input("Which Product?")
if not product in shopping_list:
print(product + " isn't on the shopping list!")
else:
shopping_list.remove(product)
def show():
if len(shopping_list) == 0:
print("The list is empty")
else:
i = 0
repeat len(shopping_list):
print(i, shopping_list[i])
i += 1
print("--------------------")
repeat:
command = input("Command?")
if command == "add":
add()
elif command == "delete":
delete()
elif command == "show":
show()
elif command == "quit":
break
else:
print("Invalid command")