Schreibweisen für Tupel in Python
Tupel sind für uns an dieser Stelle des Kurses dasselbe wie Listen, nur mit einem anderen Typ und etwas anderen Schreibweisen. Warum es neben den Listen auch noch Tupel gibt, kann erst etwas später erklärt werden.
Das Ausdrücken von Tupeln
Ein Tupel kann ausgedrückt werden, indem Ausdrücke für die Objekte der einzelnen Einträge durch ein Komma »,« getrennt angegeben werden. Im Gegensatz zu Listen sind hier also keine Klammern nötig.
- Ein Tupel mit zwei Stellen, die beide an das Objekt ›False‹ gebunden sind
False, False
(False, False)
Wie man sieht, werden Tupel dann mit runden Klammern ausgegeben.
- Ein Tupel mit zwei Stellen, die an das Objekt ›1‹ beziehungsweise ›2‹ gebunden sind
1, 2
(1, 2)
- Ein Tupel mit drei Stellen, die an verschiedene Objekte gebunden sind
False, 2, "z"
(False, 2, 'z')
1-Tupel
Dem letzten Operanden des Komma-Operators kann auch noch ein Komma nachgestellt werden, ohne daß dies die Bedeutung verändert.
- Konsolenprotokoll
1, 2,
(1, 2)
Um ein 1-Tupel auszudrücken kann ein Ausdruck für das mit der Stelle zu verbindende Objekt vor ein Komma geschrieben werden.
- Ein Tupel mit einer Stelle, die an das Objekt ›2‹ gebunden ist
2,
(2,)
Runde Klammern
Soll ein Attribut eines Tupels ausgedrückt werden, ist der Ausdruck für das Tupel oft einzuklammern. Daher findet man kommagetrennte Ausdrücke für Tupel in der Praxis oft in runden Klammern, obwohl im allgemeinen das Komma »,« und nicht die runden Klammern das Entscheidende beim Ausdrücken eines Tupels ist.
0-Tupel
Ein Tupel, das gar keine Stelle enthält, wird auch als 0-Tupel bezeichnet. Um ein solches 0-Tupel auszudrücken kann ein paar leerer runden Klammern verwendet werden.
- Ein Tupel ohne Stelle
()
()
Objekte und Bindungen
Es gibt nur ein einziges None-Objekt. Dennoch ist ein Tupel wie »( None, None )« möglich. Das eine None-Objekt kann sich aber nicht an zwei Stellen gleichzeitig befinden. Deswegen enthalten Tupel die Objekte nicht direkt, sie enthalten sogenannte Bindungsstellen, die an Objekte gebunden sein können. Das Objekt »( None, None )« enthält zwei Bindungsstellen, die beide an das None-Objekt gebunden sind. Die schon behandelten Namen sind ebenfalls solche Bindungsstellen.
Falls dies nicht zu Mißverständnissen führt, nennen wir die Bindungstellen auch einfach nur Stellen.
Die Reihenfolge der Auswertung ⃗
Wenn ein Komma-Ausdruck ausgewertet wird, werden die Operanden in der gegebenen Reihenfolge (von links nach rechts, also in Leserichtung) ausgewertet.
- Konsolenprotokoll
print( "a" ), print( "b" )
a
b
(None, None)
Operatoren
»+«
Der Plusoperator erlaubte uns schon eine Verkettung von Zeichenfolgen.
- Konsolenprotokoll
"12"+"3"
'123'
Der Plusoperator erlaubt eine Verkettung von Tupeln.
- Konsolenprotokoll
(1,2)+(3,)
(1, 2, 3)
Oft sind Klammern nötig, um den Vorrang festzulegen. Der Ausdruck »1, + 2,« könnte als eine Verkettung der beiden 1-Tupel »1,« und »2,« angesehen werden, aber tatsächlich wird hier nur der unäre Plus-Operator verwendet, und der erste Komma-Operator hat die beiden Operanden »1« und »+2«.
Da es so oft nötig ist, Komma-Ausdrücke einzuklammern, schreiben viele Programmierer alle Komma-Ausdrücke grundsätzlich in Klammern, auch wenn dies einmal nicht nötig sein sollte.
»*«
Der Maloperator erlaubte uns schon eine Vervielfältigung von Zeichenfolgen.
- Konsolenprotokoll
"12" * 3
'121212'
Der Maloperator erlaubt eine Vervielfältigung von Tupeln.
- Konsolenprotokoll
1, 2 * 3
1, 6
- Konsolenprotokoll
( 1, 2 )* 3
(1, 2, 1, 2, 1, 2)
»==«
Beim Vergleich zweier Tupel oder zweier Listen wird geprüft, ob die Objekte an den entsprechenden Stellen gleich sind (wenn sie mit »==« verglichen werden).
- Auswertung
( 1, 2 )==( 1, 2 )
True
- Auswertung
( 1,( 3, 5 ))==( 1,( 3, 5 ))
True
Die Regeln für den Vergleich von Objekten anderer Typen hängen von ihrer Klasse ab.
»<«
- Auswertung
( 1, 2 )<( 1, 3 )
True
Funktionen
»type«
Die Funktion »type« bestätigt den Typ.
- Konsolenprotokoll
type( ( False, False ))
<class 'tuple'>
»len«
Die Länge von Tupeln.
- Protokoll
len( () )
0
len( ( 7, ))
1
len( ( 7, 2, 4 ))
3
»bool«
Nur das leere Tupel gilt als falsch.
- Protokoll
bool( () )
False
bool( ( False, ) )
True
bool( ( 7, ))
True
len( ( 7, 2, 4 ))
True
…
Übungsaufgaben
/ Paarfunktion
Schreiben Sie eine Funktion »divmod« mit zwei Parametern die ein Paar zweier Zahlen ergibt. Die erste Zahl soll das Ergebnis der ganzzahligen Division des Wertes des ersten Arguments durch den Wert des zweiten Arguments sein; die zweite Zahl der sich bei jener Division ergebende Rest.
- Protokoll
divmod( 56, 10 )
(5, 6)
type( divmod( 56, 10 ))
<class 'tuple'>
len( divmod( 56, 10 ))
2
/ Hochhaus A ↚
Positionsnummer Ein Hochhaus hat drei Wohnungen auf jeder Etage. In jeder Etage hat jede Wohnung eine Positionsnummer: „1“ (links), „2“ (Mitte) und „3“ (rechts).
Etagennummer Das Erdgeschoß gilt als „Etage 1“, die Etage, welche sich direkt über dem Erdgeschoß befindet, gilt als „Etage 2“, die nächsthöhere als „Etage 3“ und so weiter.
Wohnungsnummer Es gibt auch eine durchlaufende Wohnungsnummer. Sie beginnt bei 1 für die Wohnung an Position 1 in der Etage 1. In jeder Etage ist die Wohnungsnummer der Wohnung bei Position 1 um 3 größer als die Wohnungsnummer der Wohnung bei Position 1 in der vorigen Etage. Die Wohnungsnummer der Wohnungen an Position 2 und Position 3 ist um 1 beziehungsweise 2 größer als die Wohnungsnummer der Wohnung an Position 1 in derselben Etage.
- Das Hochhaus
Etage 9 Wohnung 25 Wohnung 26 Wohnung 27
Etage 8 Wohnung 22 Wohnung 23 Wohnung 24
Etage 7 Wohnung 19 Wohnung 20 Wohnung 21
Etage 6 Wohnung 16 Wohnung 17 Wohnung 18
Etage 5 Wohnung 13 Wohnung 14 Wohnung 15
Etage 4 Wohnung 10 Wohnung 11 Wohnung 12
Etage 3 Wohnung 7 Wohnung 8 Wohnung 9
Etage 2 Wohnung 4 Wohnung 5 Wohnung 6
Etage 1 Wohnung 1 Wohnung 2 Wohnung 3Position 1 Position 2 Position 3
A0) Schreiben Sie eine Funktion, die aus der Etagennummer und der Positionsnummer die Wohnungsnummer ermittelt.
A1) Schreiben Sie eine Funktion, die aus der Wohnungsnummer die Etagennummer und die Positionsnummer (als ein Paar) ermittelt.
/ Hochhaus B ↚
Positionsnummer Ein Hochhaus hat drei Wohnungen auf jeder Etage. In jeder Etage hat jede Wohnung eine Positionsnummer: „0“ (links), „1“ (Mitte) und „2“ (rechts).
Etagennummer Das Erdgeschoß gilt als „Etage 0“, die Etage, welche sich direkt über dem Erdgeschoß befindet, gilt als „Etage 1“, die nächsthöhere als „Etage 2“ und so weiter.
Wohnungsnummer Es gibt auch eine durchlaufende Wohnungsnummer. Sie beginnt bei 0 für die Wohnung an Position 0 in der Etage 0. In jeder Etage ist die Wohnungsnummer der Wohnung bei Position 0 um 3 größer als die Wohnungsnummer der Wohnung bei Position 0 in der vorigen Etage. Die Wohnungsnummer der Wohnungen an Position 1 und Position 2 ist um 1 beziehungsweise 2 größer als die Wohnungsnummer der Wohnung an Position 0 in derselben Etage.
- Das Hochhaus
Etage 9 Wohnung 27 Wohnung 28 Wohnung 29
Etage 8 Wohnung 24 Wohnung 25 Wohnung 26
Etage 7 Wohnung 21 Wohnung 22 Wohnung 23
Etage 6 Wohnung 18 Wohnung 19 Wohnung 20
Etage 5 Wohnung 15 Wohnung 16 Wohnung 17
Etage 4 Wohnung 12 Wohnung 13 Wohnung 14
Etage 3 Wohnung 9 Wohnung 10 Wohnung 11
Etage 2 Wohnung 6 Wohnung 7 Wohnung 8
Etage 1 Wohnung 3 Wohnung 4 Wohnung 5
Etage 0 Wohnung 0 Wohnung 1 Wohnung 2Position 0 Position 1 Position 2
B0) Schreiben Sie eine Funktion, die aus der Etagennummer und der Positionsnummer die Wohnungsnummer ermittelt.
B1) Schreiben Sie eine Funktion, die aus der Wohnungsnummer die Etagennummer und die Positionsnummer (als ein Paar) ermittelt.