lehrkraefte:blc:informatik:glf20:programmieren:listen

Listen

Eine Liste kann man als einen Stapelspeicher (englisch: stack) ansehen. In der Informatik bezeichnet ein Stapelspeicher eine Datenstruktur mit minimal zwei Operationen: eine, mit der man Daten auf den Stapel legen kann, und eine, um das oberste Element des Stapels wegzunehmen. Stellen Sie sich das wie einen Stapel noch zu lesender Bücher vor. Sie wollen die Bücher des Stapels von oben nach unten durchlesen. Kaufen Sie zwischendurch ein neues Buch, kommt es oben drauf und ist damit das nächste Buch, was gelesen werden “muss”.

In Python wird eine Liste wie folgt einer Variable zugeordnet:

schulklasse = ['Anna','Max','Mia','Gustav']

Wenn nun ein Element aus der Liste auf der Konsole ausgegeben werden soll, funktioniert dies wie folgt:

print(schulklasse[0])

Nehmen Sie untenstehendes Programm und Ergänzen Sie, damit Mia auf der Konsole ausgegeben wird.

schulklasse = ['Anna','Max','Mia','Gustav']
print(   )

Es ist auch möglich einen gewissen Bereich einer Liste auszugeben, dies wird mithilfe des : gemacht.

print(schulklasse[0:2])

Damit nicht jedes Element einzeln ausgegeben werden muss, können wir hier auch Schleifen (Wiederholungen verwenden). Kopieren, testen und verstehen Sie folgenden zwei Codeblöcke:

schulklasse = ['Anna','Max','Mia','Gustav']
for student in schulklasse:
    print(student)
schulklasse = ['Anna','Max','Mia','Gustav']
counter = 0
while counter < len(schulklasse):
    print(schulklasse[counter])
    counter += 1

Ergänzen Sie die Liste der Schülerinnen und Schüler um fünf Namen. Schreiben Sie nun ein Programm, welches jeden zweiten Namen aus der Liste ausgibt.

Funktionen

Append: Diese Methode dient dazu ein neues Objekt auf den Stapel zu legen. Je nach Sichtweise wird das Objekt “oben” oder “rechts” angefügt.

schulklasse = ['Anna','Max','Mia','Gustav']
schulklasse.append('Kevin')

Tipp

Tipp

Wenn die Liste nach dem Hinzufügen auf der Konsole ausgegeben werden möchte, muss ab Schluss noch ein print-Statement eingefügt werden.

print(schulklasse)

Pop: Gibt das i-te Element aus der Liste zurück und entfernt es anschliessend. Wird der Funktion Pop kein Index mitgegeben, wird das letzte Element entfernt.

schulklasse = ['Anna','Max','Mia','Gustav']
schulklasse.pop(2)
schulklasse.pop()

Remove: Ein Element kann auch direkt, ohne den Index, gelöscht werden. Dies ist mithilfe der Methode remove möglich.

schulklasse = ['Anna','Max','Mia','Gustav']
schulklasse.remove('Max')

Index: Mit der Methode index kann man die Position eines Elements innerhalb einer Liste ermitteln. Dabei kann zusätzlich zum Element auch noch ein Suchfenster mit Start und Ende mitgegeben werden, diese Angaben sind aber optional.

schulklasse = ['Anna','Max','Mia','Gustav']
schulklasse.index('Max')

Tipp

Tipp

Damit der Index von Max auf der Konsole ausgegeben wird, benötigt das Skript noch ein print-Statement.

print(schulklasse.index('Max'))
  1. Legen Sie eine Liste mit Namen “zahlen” an, die mindestens 10 Elemente enthält.
  2. Geben Sie das siebte Element der Liste aus.
  3. Geben Sie die Elemente zwei bis acht als Liste aus.
  4. Geben Sie die Elemente zwei bis acht als einzelne Elemente aus
  5. Fügen Sie die Zahlen 15, 23 und 95 zur Liste hinzu.
  6. Löschen Sie das dritte Element aus der Liste.
  7. Löschen Sie die Zahl 23 aus der Liste.

Ziel ist es ein Programm zu schreiben, das beliebige Beträge (erst mal nur in Noten) auszahlen kann.

Die grundlegende Idee ist, immer die grösstmögliche Note so oft wie möglich auszuzahlen und sich dann um den Rest zu kümmern.

Testen und Verstehen Sie folgenden Code:

betrag = 480  # oder   betrag=inputInt("Bitte Betrag eingeben")
 
if betrag>=200:
    anzahl = int(betrag/200)
    print("%d 200er Noten" % anzahl)
    betrag -= 200*anzahl
 
if betrag>=100:
    anzahl = int(betrag/100)
    print("%d 100er Noten" % anzahl)
    betrag -= 100*anzahl
 
if betrag>=50:
    anzahl = int(betrag/50)
    print("%d 50er Noten" % anzahl)
    betrag -= 50*anzahl
 
if betrag>=20:
    anzahl = int(betrag/20)
    print("%d 20er Noten" % anzahl)
    betrag -= 20*anzahl
 
if betrag>=10:
    anzahl = int(betrag/10)
    print("%d 10er Noten" % anzahl)
    betrag -= 10*anzahl
 
if betrag>0:
    print("Es ist noch ein Betrag von %d übrig" % betrag)
 

Was ins Auge sticht sind die wiederholten Code-Abschnitte. Das sollte wenn möglich vermieden werden, aus verschiedenen Gründen:

  • Mühsam zu tippen.
  • Anfälligkeit für Tippfehler (nur ein Fall funktioniert nicht, was schwerer feststellbar ist)
  • Unübersichtlichkeit

Darum soll der Code wie folgt neu geschrieben werden:

betrag = 480  # oder   betrag=inputInt("Bitte Betrag eingeben")
noten = [200,100,50,20,10]
for note in noten:
  #
  # TODO: Nur noch ein einziges if...
  #
if betrag>0:
    print("Es ist noch ein Betrag von %d übrig" % betrag)

Erweitern Sie den Code nun so, dass auch Münzen ausbezahlt werden.

Schreiben Sie ein Programm, welches den Benutzer nach Zahlen fragt und diese dann in einer Liste speichert. Wenn der Benutzer anstelle einer Zahl den Buchstaben q eintippt, soll die gesamte Liste ausgegeben werden.

Ergänzen Sie das Programm der vorherigen Aufgabe indem Sie die Liste aufsteigend sortieren. Überlegen Sie sich zuerst wie die Sortierung gemacht werden soll, indem Sie dem Ablauf auf ein Papier zeichnen. Starten Sie anschliessend mit dem Programmieren.

Lösungvorschläge

Lösungvorschläge

#Ergänzen Sie die Liste der Schülerinnen und Schüler um fünf Namen.

schulklasse = ['Anna','Max','Mia','Gustav','Paula','Hugo','Petra','Fritz','Emily']


#Schreiben Sie nun ein Programm, welches jeden zweiten Namen aus der Liste ausgibt.
#Option 1: For-Schleife

for student in range(0,len(schulklasse),2):
    print(schulklasse[student])


#Option 2: While-Schleife

counter = 0
while counter < len(schulklasse):
    print(schulklasse[counter])
    counter += 2
#Legen Sie eine Liste mit Namen “zahlen” an, die mindestens 10 Elemente enthält.
zahlen = [3,7,1,67,98,34,76,56,90,32]


#Geben Sie das siebte Element der Liste aus.
print(zahlen[6])


#Geben Sie die Elemente zwei bis acht als Liste aus.
print(zahlen[1:7])


#Geben Sie die Elemente zwei bis acht als einzelne Elemente aus
#Option 1:
counter = 1
while counter < 7:
    print(zahlen[counter])
    counter += 1

#Option 2:
for zahl in range(1,7):
    print(zahlen[zahl])


#Fügen Sie die Zahlen 15, 23 und 95 zur Liste hinzu.
zahlen.append(15)
zahlen.append(23)
zahlen.append(95)


#Löschen Sie das dritte Element aus der Liste.
zahlen.pop(2)


#Löschen Sie die Zahl 23 aus der Liste.
zahlen.remove(23)
betrag = 480  # oder   betrag=inputInt("Bitte Betrag eingeben")
noten = [200,100,50,20,10]
for note in noten:
    if betrag>=note:
        anzahl = int(betrag/note)
        print("%d %ser Noten" % (anzahl,note))
        betrag -= note*anzahl
        
if betrag>0:
    print("Es ist noch ein Betrag von %d übrig" % betrag)
betrag = 488.35  # oder   betrag=inputInt("Bitte Betrag eingeben")
noten = [200,100,50,20,10,5,2,1,0.5,0.2,0.1,0.05]
for note in noten:
    if betrag>=note:
        anzahl = int(betrag/note)
        if(note > 5):
            print("%d %ser Noten" % (anzahl,note))
        else:
            print("%d %ser Münzen" % (anzahl,note))
        betrag -= note*anzahl
        
if betrag>0:
    print("Es ist noch ein Betrag von %d übrig" % betrag)
print("Guten Tag")
liste = []

while True:
    eingabe = input("Bitte geben Sie eine positive Zahl ein")
    if eingabe == 'q' :
        break
    else:
        liste.append(eingabe)

print("Folgende Liste wird nun sortiert:")
print(liste)
#Ergänzung zur vorigen Aufgabe, Liste muss mitgegeben werden
#Version 1
for i in range(len(liste)):
    for j in range(i,len(liste)):
        if liste[i] > liste[j]:
            liste[i], liste[j] = liste[j], liste[i]

print(liste)
#Ergänzung zur vorigen Aufgabe, Liste muss mitgegeben werden
#Version 2

sortedList = []

while len(liste)>0:
    minValue = liste[0]
    minIndex = 0
    counter = 0
    
    for element in liste:
        if element < minValue:
            minValue = element
            minIndex = counter
        counter += 1
    sortedList.append(liste[minIndex])
    liste.pop(minIndex)

print(sortedList)
        
  • lehrkraefte/blc/informatik/glf20/programmieren/listen.txt
  • Last modified: 2020/11/06 13:19
  • by mirco.triner