5. Lektion: Variablen Vielfalt

Aus Micropython Referenz
Zur Navigation springen Zur Suche springen

Datenstrukturen[Bearbeiten | Quelltext bearbeiten]

Wir haben schon über Variablen gesprochen, die einen Wert enthalten können. Es gibt in Phyton aber eine ganze Reihe von Variablen die mehrere Werte enthalten können. Dafür gibt es den Begriff Datenstruktur.

Einfache Variablen[Bearbeiten | Quelltext bearbeiten]

Einfache Variablen haben wir schon in der 2. Lektion kennengelernt.

  • Sie können nur einen Wert enthalten.
  • Sie sind nicht auf einen Datentyp festgelegt, sondern können aufnehmen, was man ihnen gerade zuweist.

Konstanten[Bearbeiten | Quelltext bearbeiten]

Konstanten gibt es in Python nicht. Will man Werte als konstant kennzeichnen, so schreibt man ihren Namen komplett in Großbuchstaben.
In Micropython gibt es allerdings Konstanten.
Eine Konstante wird mit der Funktion const() erzeugt:

KONSTANTE_INT = const(42)
KONSTANTE_STR = const('Hallo')
KONSTANTE_FLOAT = const(3.14)

Listen[Bearbeiten | Quelltext bearbeiten]

https://medium.com/@pythonfundamentals/python-lists-an-essential-guide-with-code-examples-8c30f61e1c67

Erzeugen[Bearbeiten | Quelltext bearbeiten]

liste = [1, 2, 3]
  • Die Werte von Listen werden in eckige Klammern geschrieben.
  • Listen sind veränderbar - mutable
  • Werte dürfen mehrfach vorkommen.
  • Es können unterschiedliche Datentypen in einer Liste enthalten sein.
  • Listen dürfen Listen enthalten

Übung[Bearbeiten | Quelltext bearbeiten]

  • Erzeugt 10 Listen mit einheitlichen und gemischten Datentypen.
  • Erzeuge dabei auch Listen die eine oder mehrere Listen enthalten.
  • Wir sichern die Listen als listen_1.py

Lesen[Bearbeiten | Quelltext bearbeiten]

  • Die Werte in einer Liste sind indiziert.
  • Der Index beginnt mit 0 !!!
  • Über den Index kann auf den Wert zugegriffen werden
x = liste[1]  # => 2

Übung[Bearbeiten | Quelltext bearbeiten]

  • Greift über den Index auf einzelne Elemente Eurer Listen zu.

Verändern[Bearbeiten | Quelltext bearbeiten]

  • Über den Index können einzelne Werte verändert werden.
liste[1] = 5   #  => [1, 5, 3]

Übung[Bearbeiten | Quelltext bearbeiten]

  • Verändert einzelne Werte in euren Listen und überprüft die Änderung
  • Ändert den Datentyp einzelner Elemente

Erweitern[Bearbeiten | Quelltext bearbeiten]

.insert(i, x)[Bearbeiten | Quelltext bearbeiten]

  • fügt an Index i den Wert x ein.

.append(x)[Bearbeiten | Quelltext bearbeiten]

  • fügt ein neues Element zur Liste hinzu
    • liste.append([10, 20]) => [1, 2, 3, [10, 20]]

.extend(x)[Bearbeiten | Quelltext bearbeiten]

  • fügt ggf. mehrere Elemente hinzu.
    • liste.extend([10, 20]) => [1, 2, 3, 10, 20]

Übung[Bearbeiten | Quelltext bearbeiten]

  • Erweitert eure Listen mit allen Methoden und überprüft die Änderungen

Verkleinern[Bearbeiten | Quelltext bearbeiten]

.pop([i])[Bearbeiten | Quelltext bearbeiten]

  • Entfernt das Element mit Index i aus der Liste und gibt es zurück.
    • ohne i wird das letzte Element ausgewählt.

.remove(x)[Bearbeiten | Quelltext bearbeiten]

  • Entfernt das erste Element mit dem Wert x.

Übung[Bearbeiten | Quelltext bearbeiten]

  • Holt mit pop ein Element aus einer Liste und zeigt es mit print() an.
  • Entfernt alle Elemente mit dem selben Wert aus einer Liste.

Sortieren[Bearbeiten | Quelltext bearbeiten]

.reverse()[Bearbeiten | Quelltext bearbeiten]

  • kehrt den Inhalt der Liste um. (Ohne Sortierung)

.sort(reverse=True|False, key=myFunc)[Bearbeiten | Quelltext bearbeiten]

  • sortiert eine Liste
    • Ohne Parameter wird alphabetisch sortiert.
    • k(ey) gibt den Sortierschlüssel an. Z.B. Länge bei Strings.
    • r(everse) gibt eine umgekehrte Sortierung zurück.
  • Es können nur gleiche Datentypen sortiert werden.

Übung[Bearbeiten | Quelltext bearbeiten]

  • Sortierte ein paar Deiner Listen.
  • Prüfe ob wirklich nur gleiche Datentypen sortiert werden können.

Suchen[Bearbeiten | Quelltext bearbeiten]

.index(x)[Bearbeiten | Quelltext bearbeiten]

  • index gibt den Index des ersten Auftretens von x in der Liste zurück.

.count(x)[Bearbeiten | Quelltext bearbeiten]

  • gibt zurück wie oft x in der Liste vorkommt.

Übung[Bearbeiten | Quelltext bearbeiten]

  • suche nach Einträgen in deinen Listen.
  • Zähle einige Werte.

Löschen[Bearbeiten | Quelltext bearbeiten]

.clear()[Bearbeiten | Quelltext bearbeiten]

  • alle Elemente einer Liste entfernen.

Übung[Bearbeiten | Quelltext bearbeiten]

  • leere eine Deiner Liste mit .clear() und kontrolliere den Inhalt.


Tuple[Bearbeiten | Quelltext bearbeiten]

Tuple sind wie Listen, nur können sie nicht verändert werden. Sie sind immutable.
Die Werte eines Tuple werden in () gesetzt.

my_tuple = (1, 2, 'Hallo')
my_tuple_single = (42,)    # bei nur einem Wert ist ein Komma nötig

Die Werte im Tuple sind indiziert, wie bei den Listen. Deshalb können sie genauso ausgelesen werden.

tuple()
damit kann ebenfalls ein Tuple erstellt werden, z.B. aus einer Liste.
>>> liste = ['', 'Hallo', 'Micropython', 'Mickey', 'Mouse', 'Welt']
>>> tuple_liste = tuple(liste)
>>> tuple_liste
    ('', 'Hallo', 'Micropython', 'Mickey', 'Mouse', 'Welt')
>>> tuple_liste[1]
    'Hallo'
>>> 
Übung:[Bearbeiten | Quelltext bearbeiten]

Probiere aus welche Listen-Methoden bei Tuples funktionieren und welche nicht.

Tuple vs. Listen[Bearbeiten | Quelltext bearbeiten]

Ich mal den Speicherbedarf von Tuples und Listen verglichen (M5Stick C):

>>> messungen = 60*24
>>> temp_werte = []
>>> import gc
>>> gc.mem_free()
    76144
>>> for i in range(messungen):
        temp_werte.append((33.4, 21.3, 23.7, 27.0))
    
>>> gc.mem_free()
    21824
>>> temp_werte = []
>>> gc.mem_free()
    76144
>>> for i in range(messungen):
        temp_werte.append([33.4, 21.3, 23.7, 27.0])
    
>>> gc.mem_free()
    15424
>>> 

Funktionen die auf Listen und Tuple angewendet werden können[Bearbeiten | Quelltext bearbeiten]

len(x)[Bearbeiten | Quelltext bearbeiten]

  • gibt die Länge der Liste x zurück.

max(x)[Bearbeiten | Quelltext bearbeiten]

  • gibt den größten Wert aus der Liste x zurück.

min(x)[Bearbeiten | Quelltext bearbeiten]

  • gibt den kleinsten Wert aus der Liste x zurück.

sum(x)[Bearbeiten | Quelltext bearbeiten]

  • gibt die Summe der Werte in x zurück.

sorted(x)[Bearbeiten | Quelltext bearbeiten]

  • gibt x sortiert zurück.

del(x)[Bearbeiten | Quelltext bearbeiten]

  • löschen eines Elementes - nicht bei Tuple
    • del(liste[1])
  • löschen der ganzen Datenstruktur
    • del(liste)

Übung:[Bearbeiten | Quelltext bearbeiten]

  • Wende diese Funktionen auf verschiedene Deiner Listen an.
  • Teste den Unterschied zwischen l.clear() und del(l) aus.


Dictionaries / Wörterbücher[Bearbeiten | Quelltext bearbeiten]


In Python 3.6 und davor waren Dictionaries unsortiert.

Erzeugen[Bearbeiten | Quelltext bearbeiten]

dictionary = {key1: value1, key2: value2}

  • Dictionaries enthalten eine Liste von key:value Paaren.
    • key = Schlüssel
    • value = Wert
    • item = Schlüssel:Wert-Paar
  • Die items sind nicht sortiert und können ihre Reihenfolge verändern.
  • Keys dürfen nur einmal vorkommen.
  • Keys dienen als Index.
  • Values dürfen Dictionaries und andere Datenstrukturen enthalten.

Übung[Bearbeiten | Quelltext bearbeiten]

  • Erstelle ein Wörterbuch, das die Zahlen 0 bis 9 als Schlüssel und die Wörter als Wert enthält.
  • Erstelle ein Wörterbuch das die deutschen Worte für die Zahlen 0 bis 9 als key und die englischen Worte als value enthält.
  • Erstelle ein Dictionary das 'Aussen', 'Wohnzimmer' und 'Schlafzimmer' als key enthält und die values dazu enbenfalls ein Dictionary mit den keys 'Temperatur', 'Luftdruck' und 'Luftfeuchte' sind. Die values dazu könnt Ihr selbst bestimmen.
  • Diese Dictionaries als dict_1.py sichern.

Lesen[Bearbeiten | Quelltext bearbeiten]

  • x = d[key] - gibt den Wert des Schlüssels zurück
  • x = d.items() - erstellt eine Liste mit den key:value-Paaren
  • x = d.keys() - erstellt eine Liste mit den keys
  • x = d.values() - erstellt eine Liste mit den values

Übung[Bearbeiten | Quelltext bearbeiten]

  • Lasst Euch aus der 1. Liste die Worte für einige Zahlen ausgeben.
  • Lasst Euch aus der 2. Liste die englischen Worte für die deutschen Zahlenworte ausgeben.
  • Lasst Euch die Temperaur aller 3 Messstellen anzeigen.
  • Spielt ein bischen mit den 3 Methoden herum.

Erweitern[Bearbeiten | Quelltext bearbeiten]

  • d[neuer_key] = value

Übung[Bearbeiten | Quelltext bearbeiten]

  • Fügt zu den beiden ersten Dictionaries weitere Items hinzu.
  • Versucht dem Datensatz des Wohnzimmer noch den Messwert co2 hinzuzufügen.

Verändern[Bearbeiten | Quelltext bearbeiten]

  • value eines items ändern
    • d[key] = neuer_Wert
  • key eines items ändern
    • d[neuer_key] = d[alter_key]
      del[alter_key]
    • d[neuer_key] = d.pop(alter_key)

Übung[Bearbeiten | Quelltext bearbeiten]

  • Verändere einige Werte in dem 3. Dictionary.
  • Ändere im 3. Dictionary den Namen Luftfeuchte in Feuchte.

Verkleinern[Bearbeiten | Quelltext bearbeiten]

  • d.pop(key) - gibt das item mit dem key zurück und entfernt es.

Übung[Bearbeiten | Quelltext bearbeiten]

  • Lese die Werte des key Feuchte aus und entferne diese Items.

Sortieren[Bearbeiten | Quelltext bearbeiten]

  • Dictionaries sind grundsätzlich unsortiert!
  • In Python gibt es inzwischen auch sortierte Dictionaries. In Micropython habe diese noch keinen Eingang gefunden.

Suchen[Bearbeiten | Quelltext bearbeiten]

Zum Suchen in Dictionaries gibt keine Methode. Entweder muss über das Dictionary iteriert werden, oder mit in geprüft werden ob der key vorhanden ist.
Ein Beispiel mit dem in-Operator hatten wir schon in der 4. Lektion.

Löschen[Bearbeiten | Quelltext bearbeiten]

  • del d[k] löscht das eine Item.
  • d.clear() löscht alle items.

Übung[Bearbeiten | Quelltext bearbeiten]

  • Lösche alle Luftdruck Items.
  • Lösche alle Items des 3. Dictionaries.
  • Lösche das 3. Dictionary komplett.


Strings[Bearbeiten | Quelltext bearbeiten]

  • Strings kann man als Sonderform von Listen betrachten, die nur Zeichen enthalten.
  • Deshalb kann man sie auch so behandeln wie Listen. (Stimmt nur bedingt!)
  • Strings sind aber immutable also unveränderlich
    • wenn ein String verändert wird muss jedesmal ein neuer String angeleg werden.

Übung (für Zuhause)[Bearbeiten | Quelltext bearbeiten]

  • Testet aus welche Methoden von Listen bei Strings funktionieren.

Zusammenführen[Bearbeiten | Quelltext bearbeiten]

Übung[Bearbeiten | Quelltext bearbeiten]

  • Erstelle mehrere Strings und probiere beide Methoden zum Zusammenführen.

Vervielfachen[Bearbeiten | Quelltext bearbeiten]

  • str1 * n

Übung[Bearbeiten | Quelltext bearbeiten]

  • Spiele ein wenig mit der Multiplikation von Strings.

Ausrichten[Bearbeiten | Quelltext bearbeiten]

  • s.center(width)
    • Der fillchar-Parameter aus Python geht hier nicht!
  • .ljust() und .rjust() gibt es Microphyton nicht.

Übung[Bearbeiten | Quelltext bearbeiten]

  • gibt deine Strings in verschiedenen Spaltenbreiten zentriert aus.

Slicing[Bearbeiten | Quelltext bearbeiten]

  • Mithilfe von Slicing lässt sich der Zugriff auf ein Iterable auf einen Ausschnitt begrenzen.
>>> text = 'Hallo Micropython - du bist klasse!'
>>> text[0:5]
'Hallo'
>>> text[:5]
'Hallo'
>>> text[6:17]
'Micropython'

# Von hinten:
>>> text[-7:-1]
'klasse'
>>> text[-7:]
'klasse!'
  • Slicing funktioniert bei allen Datenstrukturen mit nummerischem Index.
Übung:[Bearbeiten | Quelltext bearbeiten]
  • Zerlege den String text mit Slicing in seine einzelnen Worte und speichere diese in jeweils einer Variablen. Z.B. text1, text2 usw.


Weitere Datenstrukturen[Bearbeiten | Quelltext bearbeiten]

Diese werden nur zur Kenntniss gegeben. Sie werden hier nicht behandelt.

Set[Bearbeiten | Quelltext bearbeiten]

Sets sind die Datenstruktur zur Arbeit mit Mengen.
Elemente einer Menge müssen einmalig sein!

menge = {1, 2, 'Hallo'}
Casting:[Bearbeiten | Quelltext bearbeiten]

set()

Tip:[Bearbeiten | Quelltext bearbeiten]

Sets werden hier nicht weiter behandelt. Es gibt aber eine praktische Anwendung.
Wenn man doppelte Einträge in Listen entfernen möchte geht das so sehr einfach:

>>> meine_liste = [1, 2, 3, 3, 1, 5]
>>> mein_set = set(meine_liste)
>>> mein_set
{5, 1, 2, 3}
>>> kleine_liste = list(mein_set)
>>> kleine_liste
[5, 1, 2, 3]
>>> 

Array[Bearbeiten | Quelltext bearbeiten]

Arrays sind in Python nicht im Core implementiert. Sie werden meist auch nicht gebraucht, weil sie durch Listen gebildet werden können. Zudem sind Listen flexibler in der Ausgestaltung.
Wenn Arrays aber für mathematische Anwendung erforderlich sind, so bietet das Modul array die Möglichkeit arrays zu erstellen.

Navigation[Bearbeiten | Quelltext bearbeiten]

Zurück zu Micropython Kurs 2023 - Teil 1
Zurück zur "Micropython Kurs 2023" Startseite
Zurück zur Programmieren Startseite
Zurück zur Wiki Startseite