24.02.2014 Aufrufe

4 in 1 - Medieninformatik - Hochschule RheinMain

4 in 1 - Medieninformatik - Hochschule RheinMain

4 in 1 - Medieninformatik - Hochschule RheinMain

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Programmieren <strong>in</strong> Python<br />

Funktionale Primitive<br />

Programmieren <strong>in</strong> Python<br />

List Comprehension<br />

Def<strong>in</strong>ition von reduce<br />

List Comprehension<br />

myreduce selbst gemacht<br />

• for-Schleife<br />

• Funktion als Parameter<br />

• Aufbau des Ergebniswerts<br />

Verwenden wie e<strong>in</strong>gebautes reduce<br />

1 def myreduce(func, seq, <strong>in</strong>it=None):<br />

2 if <strong>in</strong>it == None:<br />

3 <strong>in</strong>it = seq[0]<br />

4 seq = seq[1:]<br />

5 wert = <strong>in</strong>it<br />

6 for ele <strong>in</strong> seq:<br />

7 wert = func(wert, ele)<br />

8 return wert<br />

Listentransformation<br />

• Anwendungsgebiet wie funktionales<br />

Programmieren<br />

• E<strong>in</strong>fachere Verwendung der<br />

Möglichkeiten von map und filter<br />

zusammen mit lambda und for<br />

Syntax [ for <strong>in</strong> ]<br />

1 >>> map(lambda x: x+1, [1,2,3,4])<br />

2 [2, 3, 4, 5]<br />

3 >>> [x+1 for x <strong>in</strong> [1,2,3,4]]<br />

4 [2, 3, 4, 5]<br />

5 >>> filter(lambda x:x>3, [1,5,2,6,7])<br />

6 [5, 6, 7]<br />

7 >>> [x for x <strong>in</strong> [1, 5, 2, 6, 7] if x>3]<br />

8 [5, 6, 7]<br />

1 >>> add = lambda x,y: x+y<br />

• statt lambda-Ausdruck<br />

2 >>> reduce(add, range(101))<br />

3 5050<br />

4 >>> myreduce(add, range(101))<br />

5 5050<br />

6 >>> sub = lambda x,y: x-y<br />

7 >>> myreduce(sub, [1,2,3,4,5], 100)<br />

8 85<br />

9 >>> reduce(sub, [1,2,3,4,5], 100)<br />

10 85<br />

• Durch for wird sukkzesive e<strong>in</strong><br />

Wert aus zugewiesen<br />

• Zusätzlich if , als Filter<br />

• Beliebig komb<strong>in</strong>ierbar<br />

Ausdrucksweisen<br />

• Statt verschachtelte for-Schleifen<br />

• Ähnelt math. Mengenschreibweise<br />

1 >>> [x**2 for x <strong>in</strong> range(1, 11)<br />

2 if x % 2 == 0]<br />

3 [4, 16, 36, 64, 100]<br />

{x 2 |1 ≤ x ≤ 10, x mod 2 = 0} =<br />

{4, 16, 36, 64, 100}<br />

Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 197 / 326<br />

Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 198 / 326<br />

Programmieren <strong>in</strong> Python<br />

List Comprehension<br />

Programmieren <strong>in</strong> Python<br />

List Comprehension<br />

List Comprehension – Beispiele mit Zahlen<br />

List Comprehension – Beispiele mit Text<br />

Quadratzahlen<br />

• Zahlen von 0 bis 9; 1 bis 10<br />

• Ausdruck statt Funktion<br />

Komplexe Def<strong>in</strong>ition<br />

• Mischen von Filtern und<br />

Funktionsapplikation<br />

• Aufzählen durch for<br />

Kartesisches Produkt<br />

• Sequenzen komb<strong>in</strong>ieren<br />

• Kartesisches Produkt,<br />

Vollkomb<strong>in</strong>ation<br />

• Nicht so bei funktionalem<br />

Primitiv map<br />

zip<br />

• Built<strong>in</strong>, generiert Tupel<br />

1 >>> [x for x <strong>in</strong> range(10)]<br />

2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]<br />

3 >>> [x*x for x <strong>in</strong> range(1, 11)]<br />

4 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]<br />

1 >>> [(x,y) for x <strong>in</strong> range(4)<br />

2 for y <strong>in</strong> range(0,5,2)<br />

3 if x < y]<br />

4 [(0, 2), (0, 4), (1, 2), (1, 4),<br />

5 (2, 4), (3, 4)]<br />

1 >>> map(lambda x,y: x+y, range(5), range(5))<br />

2 [0, 2, 4, 6, 8]<br />

3 >>> [x+y for x <strong>in</strong> range(5) for y <strong>in</strong> range(5)]<br />

4 [0, 1, 2, 3, 4, 1, 2, 3, 4, 5, 2, 3, 4, 5, 6,<br />

5 3, 4, 5, 6, 7, 4, 5, 6, 7, 8]<br />

1 >>> [x+y for (x,y) <strong>in</strong> zip(range(5),range(5))]<br />

2 [0, 2, 4, 6, 8]<br />

3 >>> zip(range(5), range(5))<br />

4 [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]<br />

Wörter ersetzen<br />

• Kle<strong>in</strong>e Zahlen durch Wörter ersetzen<br />

• Für alle Worte, falls das Wort 1,2 oder<br />

3 ist,<br />

• dann ersetze durch Zahlwort und<br />

setze neuen Str<strong>in</strong>g zusammen<br />

Datei von Zahlen zeilenweise lesen<br />

• Zeilenweise e<strong>in</strong>lesen und aufteilen<br />

(splitten)<br />

• Alle Str<strong>in</strong>gs aus Ziffern je Zeile <strong>in</strong> Liste<br />

von Zahlen umwandeln<br />

• Tupel aus Liste machen<br />

1 >>> trans = {’2’:’zwei’, ’3’: ’drei’,<br />

2 ’4’: ’vier’}<br />

3 >>> s = """2 Sachen und 3 Sachen s<strong>in</strong>d<br />

4 nicht 4 Sachen"""<br />

5 >>> pr<strong>in</strong>t " ".jo<strong>in</strong>([trans[w]<br />

6 if w <strong>in</strong> trans else w<br />

7 for w <strong>in</strong> s.split()])<br />

8 zwei Sachen und drei Sachen s<strong>in</strong>d<br />

9 nicht vier Sachen<br />

1 >>> d = "zahlen.dat"<br />

2 >>> file(d).readl<strong>in</strong>es()<br />

3 [’1 2 3\n’, ’42 343 12\n’,<br />

4 ’8 77 223\n’, ’23 43\n’,<br />

5 ’45 3 3 66 7\n’]<br />

6 >>> [tuple(map(<strong>in</strong>t, l<strong>in</strong>e.split()))<br />

7 for l<strong>in</strong>e <strong>in</strong> file(d)]<br />

8 [(1, 2, 3), (42, 343, 12), (8, 77, 223),<br />

9 (23, 43), (45, 3, 3, 66, 7)]<br />

Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 199 / 326<br />

Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 200 / 326

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!