Code: Alles auswählen
+----+----+----+----+----+
| 0 | 1 | 2 | 3 | 4 |
| 10 | 11 | 12 | 13 | 14 |
| 20 | 21 | 22 | 23 | 24 |
+----+----+----+----+----+
Explizite Definition einer Matrix
Diese bietet sich bei kleineren Tabellen an. Die Vorgehensweise ist folgendermaßen:
Code: Alles auswählen
matrix1 = [
[ 0, 1, 2, 3, 4], # Zeile 0
[10, 11, 12, 13, 14], # Zeile 1
[20, 21, 22, 23, 24] # Zeile 2
]
Wie kann man nun eine solche Matrix bzw. Teile von ihr ausgeben?
Mit dem Befehl
Code: Alles auswählen
print('matrix1:', matrix1)
Code: Alles auswählen
matrix1: [[0, 1, 2, 3, 4], [10, 11, 12, 13, 14], [20, 21, 22, 23, 24]]
Code: Alles auswählen
print('matrix1[2]: ', matrix1[2])
Code: Alles auswählen
matrix1[2]: [20, 21, 22, 23, 24]
Code: Alles auswählen
print('matrix1[2][3]: ', matrix1[2][3])
Code: Alles auswählen
matrix1[2][3]: 23
Allgemein bezieht sich matrix1[ i ][ j ] auf das Matrixelement aus Zeile i und Spalte j.
Programmierte Ein- und Ausgabe
In vielen Fällen (z. B. bei großen Matrizen) ist es sinnvoll, die Matrix durch das Programm selbst erzeugen zu lassen. Dazu definiert man zunächst eine Matrix, deren Elemente alle den Wert 0 haben. Für die oben angegebene Matrix würde das so aussehen:
Code: Alles auswählen
w = 5 # Weite (Spaltenanzahl)...
h = 3 # Höhe (Zeilenanzahl) der Matrix
matrix2 = [[0 for j in range(w)] for i in range(h)] # Matrix mit w Spalten und h Zeilen
Code: Alles auswählen
>>> ['hallo' for i in range(4)]
['hallo', 'hallo', 'hallo', 'hallo']
Bei der Definition der matrix2 wird zunächst durch [0 for j in range(w)] eine Liste aus den 5 Null-Elementen erzeugt: [0, 0, 0, 0, 0]. Durch [... for i in range(h)] wird nun seinerseits eine Liste mit 3 [0, 0, 0, 0, 0]-Elementen erzeugt. Das Ergebnis ist die folgende Liste:
Code: Alles auswählen
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
Code: Alles auswählen
for i in range(h):
for j in range(w):
matrix2[i][j] = i*10+j # i:Zeilenindex, j:Spaltenindex
Hier noch zwei Beispiele zur Schleifen-gesteuerten Ausgabe einer Matrix:
Code: Alles auswählen
# Alle Zeilen-Listen untereinander ausgeben:
for i in range(h):
print(matrix2[i])
print()
# Alle Elemente der Matrix (in einer einzigen Zeile) hintereinander ausgeben:
for i in range(h):
for j in range(w):
print(matrix2[i][j], end =' ')
Zu guter Letzt die wesentlichen Teile in einem einzigen Programm zum eigenen Testen...
Code: Alles auswählen
# matrizen.py
############### Explizite Eingabe von (kleinen) Matrizen als Liste von Listen ###############
matrix1 = [
[ 0, 1, 2, 3, 4], # Zeile 0
[10, 11, 12, 13, 14], # Zeile 1
[20, 21, 22, 23, 24] # Zeile 2
]
############### Ausgaben von matrix1 ########################################################
# als(als Liste von Listen):
print('matrix1:', matrix1)
print()
# einzelne Zeilen bzw. Elemente
print('matrix1[2]: ', matrix1[2]) # Zeile 2 der Matrix
print('matrix1[2][3]: ', matrix1[2][3]) # Matrixelement aus Zeile 2 | Spalte 3
print()
############### Programmierte Ein- und Ausgaben (auch) von größeren Matrizen ###########################
w = 5 # Weite (Spaltenanzahl)...
h = 3 # Höhe (Zeilenanzahl) der Matrix
# Initialisierung der Matrix liefert eine Matrix mit lauter 0-Elementen:
matrix2 = [[0 for j in range(w)] for i in range(h)] # Matrix mit w Spalten und h Zeilen
# Ausgabe zum Testen:
print(matrix2)
# Belegung der Matrix mit Werten:
for i in range(h):
for j in range(w):
matrix2[i][j] = i*10+j # i:Zeilenindex, j:Spaltenindex
# Ausgabe der Matrix (als Liste von Listen):
print('matrix2:', matrix2)
print()
# Alle Zeilen-Listen untereinander ausgeben:
for i in range(h):
print(matrix2[i])
print()
# Alle Elemente der Matrix (in einer einzigen Zeile) hintereinander ausgeben:
for i in range(h):
for j in range(w):
print(matrix2[i][j], end =' ')
Eine Anwendung
Auf dem Display des TTGO fliegt ein Gleiter durch die Weiten des Alls...
Code: Alles auswählen
# glider.py (27.11.2021)
# Eine einfache Animation: Gleiter fliegt durch das Weltall
from time import sleep
################ Initialisierung des Displays ####################
from machine import Pin, SPI
import st7789
spi = SPI(2, baudrate=20000000, polarity=1, sck=Pin(18), mosi=Pin(19))
display = st7789.ST7789(spi, 135, 240, reset=Pin(23, Pin.OUT), cs=Pin(5, Pin.OUT), dc=Pin(16, Pin.OUT), backlight=Pin(4, Pin.OUT), rotation=3)
# Landscape
display.init()
display.fill(st7789.BLUE)
############### Definition der Glider-Funktion ###############
def zeichne_glider(x, y):
w = 16
h = 16
matrix = [
[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
[0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0],
[1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
[1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0],
[0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0],
[0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
[0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
]
for j in range(h):
for i in range(w):
if matrix[j][i] == 1:
display.pixel(x+i, y+j, st7789.YELLOW)
############### Hauptprogramm ###############
while True:
for x in range(40):
zeichne_glider(6*x, 50)
sleep(0.1)
display.fill(st7789.BLUE)
.