10. Listen und Tupels

 

 

DU LERNST HIER...

 

wie du in einer Liste oder einem Tupel mehrere Werte speichern und auf diese Daten wieder zugreifen kannst.

 

 

MUSTERBEISPIELE

 

Statt Werte in verschiedenen Variable a, b, c  einzeln abzuspeichern, stellt Python Datentypen zur Verfügung, die als Behälter für beliebig viele Daten verwendet werden. In anderen Programmiersprachen verwendet man dazu oft Arrays. Im Gegensatz zu Arrays haben Listen keine feste, vordefinierte Länge, d.h. ihre Länge wird der Anzahl gespeicherter Elemente automatisch angepasst (dynamische Datenstruktur).

Die Elemente einer Liste werden in eckigen Klammern geschrieben, z. B. eine Liste mit Farbnamen:

colors = ["red", "blue, "green"]

Die Werte eines Tupels werden mit runden Klammern geschrieben, z. B. x, y-Koordinaten eines Punkts:

pt = (10, 20)

Im Gegensatz zu Listen können die Werte von Tupels nach dem Programmstart nicht mehr verändert werden. Listen und Tupels lassen sich auch kombinieren, z.B. eine Liste mit Koordinaten von Eckpunkten einer Figur:

corners = [(2, 3), (5, 8), 7, 1)]]

Beispiel 1: Auf die Elemente einer Liste zugreifen
Die Elemente einer Liste kannst du mit einer for-Schleife der Reihe nach durchlaufen (iterieren). Im Beispiel besteht die Liste colors aus 7 Farbnamen.

Mit der for-Schleife for c in colors: gehst du die Liste der Reihe nach durch und zeichnest mit dieser Farbe einen gefüllten Kreis, der während 600 Millisekunden angezeigt wird. Die Schleifenbefehle müssen eingerückt sein.

Auf die Elemente einer Liste kannst du auch mit einem Index zugreifen. Das erste Element hat den Index 0, corners[3] ist also nicht etwa das dritte, sondern das vierte Element, im Beispiel also die Farbe "magenta".

 

Programm:  

# Gp10a.py
from gpanel import *

makeGPanel(-10, 10, -10, 10)
colors = ["red", "blue", "yellow", "magenta", "green", "cyan"]

for c in colors:
    setColor(c) 
    fillCircle(4)
    delay(600)
    
setColor(colors[3])
fillCircle(6)
► In Zwischenablage kopieren

 

Beispiel 2: Ein Polygon mit der Liste der Eckpunkte zeichnen

Für die Koordinaten der Eckpunkte verwendest du Tupels, z. B. (4, 2). Alle Eckpunkte werden in der Liste corners = [(4. 2), (1, 4) ...] zusammengefasst.

Die Funktion fillPolygon(corners) erwartet als Parameter eine Liste mit Punktkoordinaten und füllt die eingeschlossene Fläche.

 

Programm: 

# Gp10b.py
from gpanel import *

makeGPanel(0, 10, 0, 10)
corners = [(4, 2), (1, 4), (3, 7), (6, 8), (7, 5), (5, 3)]
setColor("blue")

for pt in corners:
    fillPolygon(corners)
► In Zwischenablage kopieren


Beispiel 3: Die Elemente einer Liste mit Mausklicks erzeugen

Die Liste ist eine dynamische Datenstruktur, d.h. die Elemente kannst du auch während der Programmausführung hinzufügen.

Im Beispiel erzeugtst du mit corners = [ ] eine leere Liste und gibst mit einem Inputdialog die Zahl der Ecken eines Polygons ein. Mit Mausklicks fügst du die Punkte ein. Dazu verwendest du die Funktion corners.append((x, y)), welche den Punkt mit den Koordinaten (x, y) am Ende der Liste hinzufügt. len(corners) gibt die aktuelle Anzahl Elemente der Liste an.

 

Programm:  

# Gp10c.py
from gpanel import *

def onMousePressed(x, y):
    pos(x, y)
    circle(0.1)
    corners.append((x, y))
    if len(corners) == n:
        for pt in corners:
            fillPolygon(corners)
    
makeGPanel(0, 20, 0, 20, mousePressed = onMousePressed)
corners = []
n = inputInt("Gib Anzahl Ecken an")
setColor("magenta")
► In Zwischenablage kopieren

 

Beispiel 4: Punkte mit Mausklicks erzeugen und alle Verbindungslinien zeichnen

In diesem Beispiel ist es vorteilhaft, die Punkte mit p und q zu bezeichnen, wobei die Punkte mit einem Koordinatentupel p = (x, y) gegeben sind. Nach jedem Mausklick wird im Punkt p ein kleiner Kreis gezeichnet, danach wird p mit allen bereits bestehenden Punkten q der Liste corners verbunden und zu der Liste hinzugefügt.

 

Programm: 

# Gp10d.py
from gpanel import *

def onMousePressed(x, y):
    p = (x, y)
    pos(p)
    fillCircle(0.2)
    for q in corners:
        line(p, q)
    corners.append(p)
  
corners = []
makeGPanel(0, 20, 0, 20, mousePressed = onMousePressed)
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

In einer Liste kannst du unter einem Namen belibig viele Daten speichern und auf diese Daten mit einem Index zugreifen. Für die Liste-Notation werden Eckige Klammern verwendet. Willst du alle Elemente der Liste durchlaufen, verwendest du am einfachsten eine for-Schleife for x in liste: Liste ist eine dynamische Datenstruktur; während der Programmausführung können Elemente hinzugefügt oder entfernt werden.

Werte eines Tupels werden in runden Klammern geschrieben. Im Unterschied zur Liste, können diese nach dem Programmstart nicht verändert werden.

 

 

ZUM SELBST LÖSEN

 

1)


Gib mit einem Inputdialog
z = inputInt("Gib eine Zahl ein")
8 Zahlen zwischen 1 und 10 ein und speichere sie in einer Liste zahlen. Schreibe die Liste mit dem Befehl print () im Ausgabefenster aus. Mit dem Befehl sort() kannst du die Liste sortieren.

Gib danach die Liste sortiert nach Grösse mit print()-Befehl aus..

 


 

2)


Zeichne gefüllte Kreise mit den Farben aus der Liste
colors = ["red", "blue", "yellow", "magenta", "green", "cyan"]

 


 

3)


Zeichne ein Haus mit Hilfe einer Liste mit den Koordinaten der Eckpunkte.

 


 

4)


Ergänze das Beispiel 4 so, dass mit dem linken Mausklick ein Punktmenge mit verbindungslinien dynamisch erzeugt wird und mit dem rechten Mausklick die geschlossenen Flächen, in welchen die Koordinaten des Mausklicks liegen, gefärbt werden.

Wie im Beispiel 5 im vorhergehenden Abschnitt, musst du zuerst überprüfen, ob der linke oder der rechte Mausbutton gedrückt wurde.

def onMousePressed(x, y):
    if isLeftMouseButton():
        ....
        
    if isRightMouseButton():
       .....  
 


 

 

ZUSATZINFORMATION:

 

Die wichtigsten Operationen mit Listen

 
 

li[i]

li.append(element)

li.insert(i, element)

li.index(element)

li.pop(i)

pop()

len(li)

del li[i]

li.reverse() 

li.sort() 

Auf Listenelement mit Index i zugreifen

Anfügen ans Ende

Einfügen an Stelle i (Element i rutscht nach rechts)

Sucht das erste Vorkommen und gibt dessen Index zurück

Entfernt das Element mit Index i und gibt es zurück

Entfernt das letzte Element und gibt es zurück

Gibt die Anzahl Listenelemente zurück

Entfernt das Element mit Index i

Kehrt die Liste um (letztes Element wird das erste)

Sortiert die Liste (Vergleich mit Standardverfahren)