Zum Inhalt

Array

In der vorherigen Lektion haben wir Schleifen kennengelernt, um Befehle mehrmals auszuführen. Aber was, wenn wir mehrere verschiedene Werte speichern und weiterverarbeiten möchten?

Beispiel 1: Verschiedene Werte in einer Schleife fürs Zeichnen verwenden (Array-Iteration)

Wenn wir z.B. drei verschiedene Farben nacheinander zum Zeichnen verwenden wollen:

  • Ohne Arrays: brauchen wir drei Variablen farbe1, farbe2 und farbe3, dabei eine Schleife zu verwenden wird etwas kompliziert.
  • Mit Arrays: brauchen wir nur eine Variable farben mit drei Elementen und können eine Schleife verwenden!

Arrays (Felder) ermöglichen uns, mehrere zusammengehörige Werte elegant zu verwalten und mit Schleifen zu verarbeiten.

Es wird hier gezeichnet...

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Question

Ändere das obige Programm so ab, dass zuerst ein blauer Punkt gezeichnet wird.

Stell dir zum Beispiel vor, du möchtest die grösste Zahl unter vier Kandidaten finden. Mit unserem bisherigen Wissen müsstest du für jede mögliche Kombination eine eigene Bedingung formulieren: der Code würde schnell unübersichtlich und fehleranfällig. Genau genommen müsstest du bei einer naiven Lösung insgesamt \(8\) Fälle berücksichtigen und Verzweigungen dazu schreiben.

Um solche Situationen eleganter zu lösen, machen wir einen Schritt der Abstraktion: Anstatt jede Zahl einzeln zu betrachten, fassen wir mehrere Werte in einer geordneten Sammlung zusammen; so, als würden wir sie nebeneinander in ein Regal stellen. In der Programmierung nennt man eine solche Struktur ein Array (im Deutschen auch „Feld“ genannt).

Fachbegriff: Array

Ein Array ist ein (Daten-)typ, der es uns ermöglicht, viele Elemente als Einheit zu behandeln. Es hat eine bestimmte Grösse (die Anzahl gespeicherter Elemente) und erlaubt uns, auf jedes einzelne Element gezielt zuzugreifen. Damit können wir Probleme viel kompakter und allgemeiner lösen, unabhängig davon, ob wir 4, 40 oder 400 Zahlen/Buchstaben/Bilder/... usw. verarbeiten wollen.

Definition

Arrays sind im Grunde genommen auch Variablen und zwar vom Typ "Array". Arrays kommen mit ihrer eigenen Syntax und auch mit neuen Sonderzeichen. An den eckigen Klammern \([]\) erkennen wir Arrays. Um ein neues Array zu definieren können wir die zwei Klammer direkt als den "Wert" verwenden, genauso wie bei allen anderen Variablendefinitionen.

neues_ArrayA = []

Wenn nichts innerhalb der Klammern steht, ist das Array erstmals leer, d.h es hat keine Elemente.

Um einem Array direkt bei der Definition mit Elementen zu füllen, können wir sie innerhalb der eckigen Klammern, durch Komma getrennt auflisten.

neues_ArrayB = [4,3,9,1]

Dieses Array enthält nun vier Elemente, und zwar die Zahlen \(4\), \(3\), \(9\) und \(1\).

Grösse

Bei einem eindimensionalen Array, also solche wie vorhin vorgestellt wurden, sagen wir für die Grösse eines Array auch "Länge". Dementsprechend heisst die Funktion um die Grösse von einem Array zu ermitteln: len().

grösse = len(neues_ArrayB)
print("Die Grösse vom Array ist: ", grösse)

In diesem Beispiel wir nun die Grösse vom Array neues_ArrayB ausgegeben, d.h es erscheint \(4\) in der Ausgabe, da das Array insgesamt vier Elemente besitzt.

Zugriff

Einzelnes Element

Um auf ein einzelnes Element zuzugreifen verwenden wir auch die eckigen Klammern. Wenn die Klammern direkt nach dem Namen der Variable steht, bedeutet dies den Zugriff auf ein Element. In diesem Fall muss innerhalb der Klammer ersichtlich sein, welches Element wir genau wollen. Die Zahl oder den Term innerhalb der Klammer bezeichnen wir als Index.

neues_ArrayB[1]

Hier wird auf das Element mit dem Index \(1\) zugegriffen . Wichtig ist hierbei, dass der Index bei \(0\) beginnt. Darum ist das Element mit Index \(1\) in diesem Fall die Zahl \(3\), (als Erinnerung: neues_ArrayB enthält [4,3,9,1]). Wenn wir dieses Element nun ausgeben, wird eine \(3\) in der Ausgabe erscheinen.

print(neues_ArrayB[1])
Question

Erstelle eine Variable vom Typ Array mit mehreren Zahlen als Inhalt. D.h. Die Variable enthält danach mehrere Zahlen.

  • Gib das erste Element aus
  • Gib die Anzahl Elemente aus
  • Gib das letzte Element aus

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Lösung
einPaarZahlen = [4,3,2,1,7]
print("Erstes Element: ", einPaarZahlen[0])
print("Anzahl: ", len(einPaarZahlen))
print("Letztes Element: ", einPaarZahlen[len(einPaarZahlen)-1])

Modifizieren

Bis jetzt haben wir Arrays einmal erstellt und sie dann so belassen. Aber diese Datenstrukturen können wir auch während der Programausführung modifizieren.

Beispiel 1: Element in Array modifizieren

Wir können ein bestehendes Array direkt mit den eckigen Klammenr [ ] modifizieren. Wir können das einzelne Element somit wie eine Variable behandeln.

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Beispiel 2: Element zu Array hinzufügen

Bei bestehenden Arrays können wir beliebig viele Elemente anhängen. Dazu schreiben wir den Namen vom Array gefolgt von .append( NEUER_WERT ). Innerhalb der zwei Klammern geben wir den gewünschten Wert an.

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Mit Arrays rechnen

Question

Addiere den Wert vom ersten Element zum Wert vom zweiten. Speichere das Ergebnis im dritten Element. Gib den ganzen Array am Schluss aus.

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013 c2zL(o4gfö3e=)i675hy/aputnd0mw+sl[r1],bv050C0n0A0x0q0I0H0b0c0I0x0H0H0o010A0q0y010406050H0z0E0E0x0K0v040f0l0;0B0j050w0;0?0^0`0/0y040518111b0w180/0C0q0P0Y0!0$0(0u0q0j0u0I1p0u0A0-050T0O0I0n1k0#0%011o1q1s1q0A1y1A1w0A0K190A0u0Y0h0W0y0x0B0(0d011C1m010k0V0n0B0x0E0n1w0H1W0B1$1E1)1A1,1.0-0a0b0|0~0j0H0P0h0K0H0c1r0x10121=190w1R2e1O1Q1P1x0C1@0(1s0B1+0h0H1w1h1j0Z1D2o0q2q0B0h2v1w0y0K0n191;1X2e2K0B2J1=2n012C0K0@0I0-0L112N0.0:2Q2x1%2T2V0-0d2Z2d0/2N2R2*0x2W040m2.2L2:2%1l1E2?2^0i2{2O2}1X2=252+040t342#2;2(30392@0-0r3d361?3g0(310-0s3d1c2H2e2v2h0C1Q2m3p010c2D1/193y1a3w2$2L3u3F0R2P373D0B0-0e0x1r1+3d0b3M3o2 0(0h0-0o3!3$2R0,040J3u3f3(010E0q0-332c3N3@2y013:0N3-401%3`0-3c3~2O3.3D43452~4148043l4b3R3%413:0M3m3n2=0-0n260A0n0H4g3S3^3*043,4m3#46303V3X1`3?4h1%3:3=4m4d3^4j0D4O4C4p0-4r4m4t3T3V0F0n0q4y4A4H4U414E4G2!4I4P4K043W3Y0B4Y4o4Q0-4S2!4;473{042Y4T4J0(4q3m564{131.4B511E4?5k4u044w0H4.5o3D4E0G5u3^3U4|4+4-4z5f5c2S4L4~503/535K3D4j2-5b4`5d4#5y4=3+5V2)0-5i0n5F5S2S0O0-2G2A0A5N3^3:0g5/415A5#5?52040p5f0w3P2I3v610w3J2f3A112i680x1z633y0/640S0U0W04.
Lösung
1
2
3
4
5
6
7
zahlen = [4, 5, 6]

erstes = zahlen[0]
zweites = zahlen[1]
summe = erstes + zweites
zahlen[2] = summe
print(summe)

Mehrere Elemente: Iteration

Häufig wollen wir alle Elemente eines Arrays nacheinander verwenden. Dies ist eine weitere Anwendung für das Konzept Schleife Wir können dazu eine Variante der for-Schleife verwenden.

Mit dem Index können wir ein einzelnes Element auslesen. Wenn wir auf alle Elemente nacheinander zugreifen wollen, müssen wir also den Index hochzählen, bis wir alle Elemente durchnummeriert haben.

Beispiel 1: Array-Iteration

ein_paar_zahlen = [8,2,3]
for i in range(3):
    zahl = ein_paar_zahlen[i]
    print(zahl)

Überlege dir zuerst was die Ausgabe von diesem Programm sein könnte! Probiere es nun aus:

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

Weitere Aufgaben

Vorhandensein eines Elements im Array überprüfen

Question

Schreibe ein Programm, welches überprüft ob ein Element in einem Array vorhanden ist. Ist der Wer der Variable gesuchteZahl in dem Array zahlen vorhanden? - du brauchst die for i in range(..)-Schleife. - du brauchst die Länge des Arrays

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013j c2zLZ(o4kgfö3e=)i675hy/9;aputndwm:sl[r1],qbv050H0q0F0C0t0M0L0c0d0M0C0L0L0r010F0t0D010406050L0E0J0J0C0O0y040g0o0_0G0m050z0_0{0}0 0@0D04051d161g0z1d0@0H0t0U0%0)0+0-0x0t0m0x0M1u0x0F0=050Y0T0M0q1p0*0,011t1v1x1v0F1D1F1B0F0O1e0F0x0%0j0#0D0C0G0-0e011H1r010n0!0q0G0C0J0q1B0L1#0G1+1J1.1F1;1?0=0a0c11130m0L0U0j0O0L0d1w0C15171`1e0z1W2j1T1V1U1C0H1|0-1x0G1:0j0L1B1m1o0(1I2t0t2v0G0j2A1B0D0O0q1e1_1$2j2P0G2O1`2s012H0O0|0M0=0P162S0?0^2V2C1,2Y2!0=0e2(2i0@2S2W2/0C2#040p2?2Q2^2,1q1J2{2}0k302T321$2`2a2:040w392*2_2-353e2|0=0u3i3b1{3l0-360=0v3i1h2M2j2A2m0H1V2r3u010d2I1@1e3D1f3B2+2Q3z3K0W2U3c3I0G0=0f0C1w1:3i0c3R3t340-0j0=0r3)3+2W0;040N3z3k3-010J0t0=382h3S3|2D013^0R3{33463 2;4a3X3}484f3,4c40043y432T3?3I4i4p3W4k1,4d042%4u4r4h0=494B454x4m0A4j3@0=0Q3r4C463Z040m0q0_2d0F0q0h3$0M3=4H1J3/043;4u3*4(0-4y4o2)063s2W0l0=0n2a4%4b2.0=0t4~4g460j0I510G534w350T0=0O1$4U4L4s0=0i5i3}4y3h4G4 1J3^0s0K3r060c5y4.5r0-4`040t0n5a2`3!4#3(5q541,3^3`5M5b3v515m463^4O4-4Q1,4*0r4,2)5A5N350=4U4W1z4Z4#5V5O0=5v4u5x5z5|5!5c0=2L2F0F5?5s5k640-0L1)04020S0E0j0F0B0b0C0R0c4U0n0E0G0W0G6c6e6g67470=0s4P0z3U2N3A6C0z3O2k3F162n6J0C1E6E3D0@6F0X0Z0#04.
Lösung
1
2
3
4
5
6
7
zahlen = [4,2,7,1,9]
gesuchteZahl = 7

for i in range(5):

    if zahlen[i] == gesuchteZahl:
        print("ja, gefunden")

Grösstes Element in einem Array

Question

Schreibe ein Programm, welches das grösste Element aus einem Array heraussucht.

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013S 2Lo4gfö3e=iA75yW/9ap}nwm{r]vIc(Dk)P6?Vä8üh;utEd:sR[1,q.lb0050X0l0V0v0n0*0Z0c0G0*0v0Z0Z0m010V0n0w010406050Z0U0A0A0v0C0r040e0j170y0h050t17191b1d150w04051r1k1u0t1r150X0n0E0^0`0|0~0S0n0h0S0*1I0S0V13050:0+0*0l1D0{0}011H1J1L1J0V1R1T1P0V0C1s0V0S0^0f0?0w0v0y0~0d011V1F010i0=0l0y0v0A0l1P0Z1?0y1|1X1 1T2224130a0c1f1h0h0Z0E0f0C0Z0G1K0v1j1l281s0t1.2x1+1-1,1Q0X2a0~1L0y210f0Z1P1A1C0_1W2H0n2J0y0f2O1P0w0C0l1s271@2x2%0y2$282G012V0C1a0*130c0$1k2*14162-2Q1}2:2=2@0d2`2w152*2.310v2?040c0k352(372~1E1X3a3c0c0g3g2+3i1@392o323d0q3q2|382 3l3v3b2@0M3z3s293C0~3m2@0p3I2}3t3L2/3E3n0Q3Q3B3k3M3V2@0u3Y3j2R3U2;3F040$0,3)3S3!3,3w0$2_2v3h3R3K3@3N3/343|3r3~3u3-3c0$3f443A3*303$3/3p4c3J473_3y4j463T410$3H4o3Z3+4r3P4u4e3D48130$3X4z3?4w4g0$3(4G3 4I4C040d3;4M4l3.0d3{2{4k4q4g0d432{1v2!2x2O2A0X1-2F3T0G2W251s4,1t4*3~2)2w054=0.2,4H3013242T0o0C0C0v0r3z0c4p3@0f130m5d5f3+12040#3z5l1}0A0n134i4(4v1}5n0%5q5y1X5t134%4~5D0~5A5C4A0~5F044y5x5N015L4c5r5E5u3/5M531X5V5S5$5O5Z4L5)4N5z130D3I4Z3@0G0$13030c0O2o0h0l0S210Y0c0n2r0c0+5a0U2r1U0l2T210c020(0U0f0V0T0O0l0C0h1T660S0Z0z6p0V6i6k6m0c0H0h0K3=5/1X5_5{0c0I0n0l0Z6p0c0z0n0C2F5t0V0c3b2d0c0W1T240y0V6g0v0U0@0.0A0c585a0r0c0E6p6r6t216G2.6J045|0b0f0+3b2F6e290h0C1g6P2!0@6$0l6(6X3b0@56290v0J0V0U0l0*1T0C0c0s6x6C6E6~4;5`710c600i0U0y0.296S6U0%0c2J0S2465671A6O6g2J7r296z6l0T7a7c6*297x0C6y6j7$6Y0?7B5^7D5|6o6q6s2r6v7y0i0R7v7K0c0!6O6X2n6:0L0C0f7a230A5?5X0~707_6`7|6u6w7-6Y6:0o0y0i1@0h0c0m0c6p0Z6*7f6%210V7?4w132u2{5e5J015h045j4c8M5T0y55786=5b5#6H5K135p5W8N5P4S5.2.5n5=4j5@3+8j7w6T6^8l6e6c790c6W7;6!7g7i6}4T7C6K8w7M2F0+6e6:8A7*6L0U0C2r0h8v8 0n6X0Z6t0c6P0*0+8B8`7{6|0y5B967@6K0v9c826N0@0n9w6_0C222r0*0P0|1I750C0)8H1}8@6M6O0c0J0j0y6)1U9M1H7J7y8o830X9i2r640i2o6565295a1i0l0H0$7O2d0H7m8Y0r0K0K0Y9X1X0J139_0C5k8N8V040nai5T0f0z132Tan5*2/0+139~608!8.130HaA4qaw042daE3@5naD8)8U8W57598ZaNau5na9ab8;0caZ8Tau8@0F9w0X0{6Y7p7r7t1U938F7F7b0|6Q7k8 785}8{6t7~7-0N3Ia!a#8#01aeal0iatb6aka6aR5caTb65n8(8-4qaraJ5m5;bb2.8P020h6mbrbm048K5I5T5naX4Yb4b48h2/8Jbx5g5ibL8I04be6?bo5:5obT3lbnbhaB048:4Y8=30aG2Z2T8GbZ3TaLbW0~0Z0vafb;010Z1`047#6m0Ia+7(0|6*6#8E6)659wb_9q130Bb_akbA2(bIcb040xcab|b~0Tb_aV3Q0t502#4)cv0t4_2y4.1k2BcC9F1T4+1B2|cy0/0;0?04.
Lösung
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
meinArray = [4,2,7,1,9]

# Vorgehen: ich brauche einen "Vergleichswert" (g)
# Dieser wird mit allen Elementen aus dem Array verglichen
# Sobald ein grösseres Element als mein aktueller Wert (g)
# gefunden wird, nehme ich diesen neuen "grössten Wert" als
# Vergleichswert für den Rest vom Programm

# Vergleichswert am Anfang = erstes Element
g = meinArray[0]

# Wir vergleichen g mit allen Elementen
# g wird beim ersten Durchgang mit sich selbst verglichen,
# aber dies ist vernachlässigbar.
# Dies könnte verhindert werden durch: for i in range(1, len(meinArray)):
for i in range(len(meinArray)):

    # Ist das aktuelle Element grösser als mein Vergleichswert?
    if meinArray[i] > g:
        g = meinArray[i]

print(f"Das grösste Element ist {g}")

Durchschnitt aller Zahlen in einem Array

Question

Schreibe ein Programm, welche das arithmetische Mittel aller Elemente (Zahlen) von einem Array aus Zahlen berechnet. Dazu dividierst du die Summe aller Zahlen durch deren Anzahl.

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013 Mc2L(o4kDgfö3e=)i6A785hy/9;aput}nd0mw:{+sl[r1],qbv050J0p0G0D0s0R0Q0b0d0R0D0Q0Q0q010G0s0E010406050Q0F0L0L0D0T0z040f0n0~0I0l050A0~1012140|0E04051i1b1l0A1i0|0J0s0Z0,0.0:0=0y0s0l0y0R1z0y0G0`050%0Y0R0p1u0/0;011y1A1C1A0G1I1K1G0G0T1j0G0y0,0h0*0E0D0I0=0e011M1w010m0)0p0I0D0L0p1G0Q1*0I1:1O1?1K1_1{0`0a0b16180l0Q0Z0h0T0Q0d1B0D1a1c1 1j0A1#2o1Y1!1Z1H0J210=1C0I1^0h0Q1G1r1t0-1N2y0s2A0I0h2F1G0E0T0p1j1~1+2o2U0I2T1 2x012M0T110R0`0b0U1b2X0{0}2!2H1;2%2)2+0e2.2n0|2X2#2^0D2*040b0o2|2V2~2=1v1O31330b0i372Y391+302f2_340x3h2:2 2?3c3m322+0t3q3j203t0=3d2+0v3z2;3k3C2$3v3e0w3H3s3b3D3M2+0B3P3a2I3L2(3w040U0K3W3J3R3Z3n0U2-2m2V1m2R2o2F2r0J1!2w3K0d2N1|1j3^1k3?3I2Y3q053~0#2Z3*3Y0I0`1{2K0u0T0T0D0z3q0b452#0h0`0q4n4p3K0_040S473Q3Y0L0s0`3/2/4v3+4x0W4A3X1;4D4F4M4c1;4K4R3B3+4P3$4V2#4x0V3z3A300`1d1{4u4B1;4r044t3:2Y4o4/1O4Y3(4@3r4N3c0`0I4.500=4;4?2/4_552$0Y0`244!4w0`0g5g3+4e044g0I4i4k4m4~4I3Y4x0r3)4W3Y0j0`0m2f544S51040s5F5z4:0M0`2K5K305d044k190p5k5v5i5X2@525!1O5w0N3z0b5,5a5G3D4+0 4-4~5.5L1O575Q3K5m4,5W5@5u4:0`0P5|5l4f0p4h4j4l5%0=4x4z5t4`5:5I6d014$4(4)5}4f0s1U0p0R0M0p0T0G663Y5{616i2$5;106059625`0`0A6A5#04534~066p5l5S2Q2K6z6h5b4x5j6!5/010Q0D5C6l0Q1.04020X0F0h0G0C0k6x0b0c6s0G6u6w6y0b2e206.4E040O6l5m5o5q6c6(5_0=0Q780H6.6:0b0s0Q0G4o7g2#7j0`7a7t6q5n6 716x6Z4H6E7v047l7y3+6/0`6=6@6_6l5w3H0A492S3=7W0A422p3`1b2s7%0D1J7Y3^0|7Z0$0(0*04.
Lösung
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
meinArray = [1,1,1]

summe = 0
n = len(meinArray)
for i in range(n):
    summe = summe + meinArray[i]


mittelwert = summe / n

print(f"Der Mittelwert von {meinArray} ist {mittelwert}")

Array befüllen

Question
  • Erstelle eine Variable vom Typ Array.
  • 'Fülle' das Array mit den Zahlen von 0 bis 20.
  • gib das Array mit print aus

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013 c2zL(o4kgfö3e=)i5hy/aputndwm:sl[r1].bv050B0o0z0w0r0G0F0b0c0G0w0F0F0p010z0r0x010406050F0y0D0D0w0I0u040f0m0/0A0k050v0/0;0?0^0-0x0405160 190v160-0B0r0N0W0Y0!0$0t0r0k0t0G1n0t0z0+050R0M0G0o1i0Z0#011m1o1q1o0z1w1y1u0z0I170z0t0W0h0U0x0w0A0$0d011A1k010l0T0o0A0w0D0o1u0F1U0A1!1C1%1y1*1,0+0a0b0`0|0k0F0N0h0I0F0c1p0w0~101:170v1P2c1M1O1N1v0B1=0$1q0A1)0h0F1u1f1h0X1B2m0r2o0A0h2t1u0x0I0o171/1V2c2I0A2H1:2l012A0I0=0G0+0J0 2L0,0.2O2v1#2R2T0+0d2X2b0-2L2P2(0w2U040n2,2J2.2#1j1C2;2?0i2_2M2{1V2:232)040s322c2E2G0 2t2f0B1O2k2$1C0c2B1-173g182F2N2J3b053n0P3u1;3l0$0A0+0e0w1p1)3b0b2!353C010h0+0p3K3M3B2}0$0*040H0K3b343V2w010j0+0l233T2/3O3E040r3/2|3)0h0C0+2y3^3N3W2Q0M0+0I1V0k0o3w3:413Y0g493_1#0D0r2*2W2a3v4a3)3Y0q0E3$0b4t3L4n2%3F3H1^4e403`0+0L4B3(4x040w0x0x1)0B4G2P4c4P3;3}4S4b0+0q3$3%2:43042E2y0z4V4o0+4d4l2M3U2:4y3I0A4+1#4p3$0 3y3e1c3t3f1g3h2f2i2d0w1x4 3g0-0v0P0R0T0F04.
Lösung
1
2
3
4
5
zahlen = []
for i in range(21):
    zahlen.append(i)

print(zahlen)

Zweidimensionale Arrays

Oft haben wir es aber mit Daten zu tun, die eher eine "Tabellenform" aufweisen wie z.B. Bilder (eine "Tabelle" von Pixel) oder Spielbretter ("Tic-Tac-Toe").

Fachbegriff: Zweidimensionaler Array

Ein zweidimensionales Array (2D) ist ein Array von Arrays:

# 3 Zeilen, 4 Spalten
array_2d = [
    [1, 2, 3, 4], # Zeile 0
    [5, 6, 7, 8], # Zeile 1
    [9, 0, 1, 2]  # Zeile 2
]

Ein 2D-Array hat viele Elemente, welche in Zeilen und Spalten angeordnet sind. Es besteht aus verschachtelten Arrays. Die Anzahl Zeilen ist die Länge des äusseren Arrays. Die Anzahl Spalten ist die Länge einer einzelnen Zeile.

Zugriff

Um nun auf ein Element zuzugreifen, müssen zwei Indexe angegeben werden, der Index der Zeile und der Index der Spalte.

#array_2d[zeile][spalte]

print(array_2d[1][2]) # Entspricht dem Wert 7 (2. Zeile, 3. Spalte)
Ändern können wir analog Elemente ändern, wie bei eindimensionalen Arrays:
array_2d[0][3] = 99 # setzt in Zeile 0, Spalte 3 den Wert 99

Beispiel 1: Über ein 2D-Array iterieren

Mit zwei verschachtelten Schleifen können wir auf alle Elemente nacheinander Zugreifen.

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

2D-Aufgaben

Summe aller Elemente (2D)

Question

Berechne die Summe aller Zahlen in einem 2D-Array.

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013j Sc2ZLz(o4kDgfö3e=)i6785hy/9;aput}nd0mw:{+s_l[r1],qbv050L0s0I0F0v0U0S0c0e0U0F0S0S0t010I0v0G010406050S0H0N0N0F0W0B040h0q110K0o050C111315170 0G04051l1e1o0C1l0 0L0v0$0/0;0?0^0A0v0o0A0U1C0A0I0}050*0#0U0s1x0=0@011B1D1F1D0I1L1N1J0I0W1m0I0A0/0k0-0G0F0K0^0f011P1z010p0,0s0K0F0N0s1J0S1-0K1?1R1_1N1|1~0}0a0c191b0o0S0$0k0W0S0e1E0F1d1f221m0C1(2r1#1%1$1K0L240^1F0K1{0k0S1J1u1w0:1Q2B0v2D0K0k2I1J0G0W0s1m211.2r2X0K2W222A012P0W140U0}0c0X1e2!0~102%2K1@2*2,2.0f2;2q0 2!2(2{0F2-040c0r2 2Y312^1y1R34360c0l3a2#3c1.332i2|370z3k2?322_3f3p352.0w3t3m233w0^3g2.0x3C2@3n3F2)3y3h0y3K3v3e3G3P2.0D3S3d2L3O2+3z040X0M3Z3M3U3$3q0X2:2p3b3L3E3.3H3)2~3?3l3^3o3%360X393~3u3!2`3W3)3j463D413:3s4d403N3{0X3B4i3T3#4l3J461p2U2r2I2u0L1%2z3N0e2Q1 1m4x1n4v3^2Z2q054D0(2$3-4q0}150W0F0B0T0f0L3t0c4j3.0k0}0t4#4%3#0|040V3C0c4?4$4p1@4/4;4t4_1R0N0v0}3=2=4-4`0}0Z4,4~0^500}3}545a014/58464^484 5104455f5m0^5i595s015c044c5r4R56040Y5j2=4?551R0e0X0}030c0g0s1`0c3+4d4@5l5C1R4{3t5J5b5o4h5B3_4.575v5Y5%0}4n5*2(5u5k5$5x5o4s5?3N5^5H5`5y3R4}5w4/5F4#5X5+1@5L5N5P5R1N2/4=4@5`5!655/5{0}3Y6n6b5Z5-5_5g5y5U5~3.602q6a2(5y534M5g6C2Y6E3N5y5e6I660}0Y696M3.6d045O5Q5S6P3@6J6S3C4e4k0}0i6g1{5.6t0^4)044+6w5w0K0#0}275#6(040j706{4T0W4V4X4Z746o4/0u3,6=2)0}2X0U0I6:6`6o6@6_615g6|6~7m6A5,727b7g0K76784Y4!6s5@0}4|7w1@6y7z7H5E7e4d6+3`7i121~6;2(7p7X6N5o6z305`0m0}0p2i7!7T040v7.3#0k0O0}2N7=2`6}044V1c0s7N5 0}737G6,046.1`0K826B0}0u0P6j5I5g7*047,0W7{3f0}0b8o6?7^7:8b7n7A7}7 0o81868d7y8D4S047j7l8w7K6u048f8h5W6V8H0O0s0W0I8s017Z8x337C4W7E8c7x7J6Q6o7B7:8*5D0Y8,2Y5`8/8r8G8=6*8R6k7s7U138C7r5w8!958.927W8#3N6@0R8Y8/8U8W6*8_7}2T2N8X8|8N858M0^0S0F7+8;1R0S1;04020!0H0k0I0E0n0v1O0d7V1O0v0S0I0P4$9q9u5o0Q9y3G9a948-7g0S5o0J9Y019A0}9D9F9H9+7d3K0C4O2V4u9`0C4H2s4z1e2va10F1M9|4x0 9}0)0+0-04.

Grösstes Element finden mit Position (2D)

Question

Finde das grösste Element in array_2d und gib Wert, Zeilenindex und Spaltenindex aus.

Beispielausgabe: Max = 17 an (2, 1).

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013j c2ZLz(o4kDgfö3e=)i6785hy/9;aputE}nd0mw:{s_l[r1],qbv050L0r0H0E0u0T0R0c0d0T0E0R0R0s010H0u0F010406050R0G0N0N0E0V0A040g0p100K0n050B101214160~0F04051k1d1n0B1k0~0L0u0#0.0:0=0@0z0u0n0z0T1B0z0H0|050)0!0T0r1w0;0?011A1C1E1C0H1K1M1I0H0V1l0H0z0.0j0,0F0E0K0@0e011O1y010o0+0r0K0E0N0r1I0R1,0K1=1Q1^1M1{1}0|0a0c181a0n0R0#0j0V0R0d1D0E1c1e211l0B1%2q1!1$1#1J0L230@1E0K1`0j0R1I1t1v0/1P2A0u2C0K0j2H1I0F0V0r1l201-2q2W0K2V212z012O0V130T0|0c0W1d2Z0}0 2$2J1?2)2+2-0e2:2p0~2Z2%2`0E2,040c0q2~2X302@1x1Q33350c0k392!3b1-322h2{360y3j2=312^3e3o342-0v3s3l223v0@3f2-0w3B2?3m3E2(3x3g0x3J3u3d3F3O2-0C3R3c2K3N2*3y040W0M3Y3L3T3#3p0W2/2o3a3K3D3-3G3(2}3=3k3@3n3$350W383}3t3Z2_3V3(3i453C403/3r4c3 3M3`0W3A4h3S3!4k3I4n473w410|0W3Q451o2T2q2H2t0L1$2y3M0d2P1~1l4D1m4B3@2Y2p054J0%2#3,4p0|140V0E0A0S0e0L3s0c4i3-0j0|0s4+4-3!0{040U3B0c4|4,4o1?4^4`4z4 1Q0N0u4w3s4?500|0Y4=540@560|3|2;5a1Q4^5d454~4t5g5704445k5f015n5e5r015h044b5w5B4^0X5o2;4|5l0@0d0W0|030c0f0r1_0c3*4c4}5q4X5b4_595x5D4g5G5$5m5c5A5.5s0|4m5-3^4@5:5p5N5C5t4r5_2%5z5}5*5t4y623M5I5K2p5M5x5P5R5T5V1M2.4{4}5~515)5B5D3X535H5|5L5~5D5Y693-646x66586u5=5y6w6d6y5t5j4S5x5I4+6e5B6g045S5U5W6O3?6Q0|0X3B4d4j0|0h6j1`5;5`1?4/044;655B0K0!0|266q6I4^0i6 6;3e4Z0V4#4%4)73630|0t3+743F0|2W0T0H6/6_6I6?6^6E6`6|046~6H7g6J04727w3276784(4*7B6a0|526B3!6z7b7I040X7e4c6*3_0|0n0V190R7l0R6:2%7p7%6+044!4$7F7O6C7J7:7M5t6A6P6v7Q7K7`6I7N7H7;7Q7f2%0l0|0o2h7*7V040u8a3!0j0O0|2M8e2_7t4#1b0r7?5%7A7L2_6,6.0K8q5/040t0P6m6T6I8604880V8k75040b8K0@8g8i8x7n7x6{0|8n0n8p815{7z8y7h047j7l8S8t8z8B8D5!5#8U0|0O0r0V0H8O017)8T7C7,777.7a8!5%7}2X5~0K8i8%7y0X972!990|8N958z6(7T8;6n5x8G0u0o8|9a048^8`8|6?020n0H0D9u7W7Y0=7#9c4^8C5Z9o8;9h047X7Z9J8 3M8~7r6I9v9x8{7T997t2S2M9$8-0@719c0R0E879:1:04020Z0G0j9D0m0;0c9S9I1N0I1M1}0K0H0c0u7!0P4,9k0@0R5t0Q9c9va27!0r7$af01ah0|0J9@0|9`9|9D9K7d3J0B4U2U4AaF0B4N2r4F1d2uaM0E1LaH4D0~aI0(0*0,04.

Zeilensummen (2D)

Question

Berechne für jede Zeile die Summe aller Elemente.

Speichere das Ergebnis wieder in einem Array Zeilensummen Die erste Zeilensumme ist \(1+2+3+4=10\), somit ist das erste Element in Zeilensummen \(10\).

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013j Sc2ZLz(o4kDgfö3e=)i6785hy/9;aput}End0mw:{+s_l[r1],.qbv050M0s0I0F0v0V0T0c0e0V0F0T0T0t010I0v0G010406050T0H0O0O0F0X0B040h0q130L0o050C13151719110G04051n1g1q0C1n110M0v0(0;0?0^0`0A0v0o0A0V1E0A0I0 050,0%0V0s1z0@0_011D1F1H1F0I1N1P1L0I0X1o0I0A0;0k0/0G0F0L0`0f011R1B010p0.0s0L0F0O0s1L0T1/0L1^1T1{1P1~200 0a0c1b1d0o0T0(0k0X0T0e1G0F1f1h241o0C1*2t1%1)1(1M0M260`1H0L1}0k0T1L1w1y0=1S2D0v2F0L0k2K1L0G0X0s1o231:2t2Z0L2Y242C012R0X160V0 0c0Y1g2$10122)2M1_2,2.2:0f2?2s112$2*2}0F2/040c0r312!332`1A1T36380c0l3c2%3e1:352k2~390z3m2^342{3h3r372:0w3v3o253y0`3i2:0x3E2_3p3H2+3A3j0y3M3x3g3I3R2:0D3U3f2N3Q2-3B040Y0N3#3O3W3(3s0Y2=2r3d3N3G3:3J3+303^3n3`3q3)380Y3b403w3$2|3Y3+3l483F433=3u4f423P3}0Y3D4k3V3%4n3L4q4a3z440 0Y3T4v3/4s4c0Y3!4C3{4E4y040f3-4I4h3*0f3@2@4g4m4c0f3 4U4l3|4X474!4r4b4L0f4e4)4w3X4,4j4/4D4+3s0f4p4@4J4_4R4u2@1r2W2t2K2w0M1)2B3P0e2S211o561p543`2#2s055c0*2(4^3h0 170X0F0B0U0f0M3v0c4#3%0k0 0t5A5C1_0~040W3E0c5O5B4*1T5K5M485I1T0O0v4z3v5W0`5K0!5H5R0`5Y0 4Z5l5+015(5*4:015-044(5:5^5?485Q5^5`4.5}5q5%0 0Z5)606166010e0Y0 030c0g0s1|0c4O4U5P6c4~5S0 5U525;5`4?656s67046a2@6r2*5`4|6A2*5 6F5$5_5Z04516K3P6M2s6G3P5`4B6w5~686E6W6X3:6f6h6j6l1P2;5N5P6O5T5#6x6Q4H6#6d6V2!6*3%5`6o6T3:6 2%711_5`4T753%77396O5`5/2!6@685A5O6O6,046i6k6m7j415;5K0Z3E4V3|0 0i6/1}5@6d5E045G606O0L0%0 296_6$040j7S6d0L5s0X5u5w5y7W6B5=0 0u3.7)7Y042Z0V0I7G7M5;7J7L6N5;7O7Q7@6}7)5K7V5V7}7Z7#5x5z857T6v7d7a6Q747k7x687,4f7B4s7D7F0L1i200L7H7)7`8v6L6u7z8m8n1_0m0 0p2k8y4m0 0v8J3:0k0P8L8u7^5^7~045u1e0s7(8z7U8!8K047E1|8S818#0u0Q6=7o867:14208N5D5F8`8f0 8h3n6q6O8F048H0X8}5r040b980`8P8R9c2+7P8W1:0o8Z8b6~0 848-8(7;7?8,8e6t048/8;6q79990P0s0X0I9g8x8T7X875v898%766u9P8o048M9n82688d8i8U0 9b9W8#8B4U069B6?8?8s9m7|5^9J9=9L8@159;6W6O7J0S9g7/9E9G9A7N8p8+9:9v9!7I0 0#9S2|5s0G0G1}8a9r9Q8$9(9s8^9|ab9X9y7A7N9i2V2P9Hapan9q9w0`0T0F8Gaf1T0T1?04020$0H0k0I0E0n0v1Q7t29a90c0T2P0M0Q5BaC3%a$0 0RaK3Ia7aZaraa2%6Oa-040Ja:01aM0 aPaRaTa~5K8l9+7p6g7r6i0K0X9E0v7?9G1Q2f0H1e8:4P3P9496a18L9I8Q9Ua^7g7}9i8X9lb59pa~7/8*7Ra+5J7+bn6p9.9#8)7F9I8|9K7.9M7$alaF7*5LbFbtbJ9x9*32928?bH1}9:bS7Kb$bQa8a@bDb#b(a;9Ub`b*3db,8Uay0XaAb`aEat2*aHaJb|a aNb2aS0Ebd0T7?6.6m0j0v7{bZa{a/cd7/9Vama,6Qa}cdb09y0c0dara)a~csb?b.8rarcIczcIaNcm1PcHcB6Qctcxagb@1PcO0 cAcYaLcfaQchb`b7321g5n2X53c?0C5g2u581g2xc}0F1Oc^5611c_0+0-0/04.

Extra: Tic-Tac-Toe Gewinnbedingung

Question

Gegeben ist ein 3×3-Array brett mit "X", "O" oder " ". Schreibe ein Programm, das prüft, ob "X" oder "O" gewonnen hat (3 in einer Reihe: waagrecht, senkrecht oder diagonal). Gib z.B. X gewinnt, O gewinnt oder Niemand gewinnt aus.

###(De-)Aktiviert den Code nach der Zeile # Tests (Groß-/Kleinschreibung wird nicht beachtet)
(Ctrl+I)
Ein- oder Ausstieg aus dem "Split-Screen"-Modus
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
Ein- oder Ausstieg aus dem "Vollbildmodus"
(Esc)
Kürzen/nicht kürzen der Rückmeldungen im Terminal (Standardausgabe & Stacktrace / Starte das Programm erneut zum Anwenden)
Wenn aktiviert, wird der aus dem Terminal kopierte Text in eine Zeile umgewandelt, bevor er in die Zwischenablage kopiert wird.

.128013 c2zL(o4kgfö3e=)i5hy/aputndwm:sl[r1].bv050B0o0z0w0r0G0F0b0c0G0w0F0F0p010z0r0x010406050F0y0D0D0w0I0u040f0m0/0A0k050v0/0;0?0^0-0x0405160 190v160-0B0r0N0W0Y0!0$0t0r0k0t0G1n0t0z0+050R0M0G0o1i0Z0#011m1o1q1o0z1w1y1u0z0I170z0t0W0h0U0x0w0A0$0d011A1k010l0T0o0A0w0D0o1u0F1U0A1!1C1%1y1*1,0+0a0b0`0|0k0F0N0h0I0F0c1p0w0~101:170v1P2c1M1O1N1v0B1=0$1q0A1)0h0F1u1f1h0X1B2m0r2o0A0h2t1u0x0I0o171/1V2c2I0A2H1:2l012A0I0=0G0+0J0 2L0,0.2O2v1#2R2T0+0d2X2b0-2L2P2(0w2U040n2,2J2.2#1j1C2;2?0i2_2M2{1V2:232)040s322c2E2G0 2t2f0B1O2k2$1C0c2B1-173g182F2N2J3b053n0P3u1;3l0$0A0+0e0w1p1)3b0b2!353C010h0+0p3K3M3B2}0$0*040H0K3b343V2w010j0+0l233T2/3O3E040r3/2|3)0h0C0+2y3^3N3W2Q0M0+0I1V0k0o3w3:413Y0g493_1#0D0r2*2W2a3v4a3)3Y0q0E3$0b4t3L4n2%3F3H1^4e403`0+0L4B3(4x040w0x0x1)0B4G2P4c4P3;3}4S4b0+0q3$3%2:43042E2y0z4V4o0+4d4l2M3U2:4y3I0A4+1#4p3$0 3y3e1c3t3f1g3h2f2i2d0w1x4 3g0-0v0P0R0T0F04.