4 in 1 - Medieninformatik - Hochschule RheinMain
4 in 1 - Medieninformatik - Hochschule RheinMain
4 in 1 - Medieninformatik - Hochschule RheinMain
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