Mikroaufgaben
Contents
Mikroaufgaben#
Diese Fingerübungsdatei: Skizze einiger Mikroaufgaben, wie sie auch in größerer Zahl in der Klausur vorkommen könnten – entweder eindeutig isoliert wie hier, oder als Teil einer leicht komplexeren Aufgabe.
Die Sterne geben ungefähr die Schwierigkeit an.
Quadratzahlen von 1 bis 20 *#
erzeuge eine Liste der Quadratzahlen von 0 bis 20
Brüche ausrechnen ****#
gegeben: Eine Liste von Brüchen als String. Gesucht: Ein Dict, das zu den Bruchzahlen den Wert als Zahl angibt.
brueche_bsp = [ "1/4", "2/5" ]
brueche_bsp_werte = { "1/4": 0.25, "2/5": 0.4 }
Lösung: siehe demo_2023-12-15
das ganz kleine Einmaleins *#
erzeuge in einem Dict das ganz kleine Einmaleins von 1 bis 3. Bsp:
k_1x1_bsp = { (1,1):1, (1,2):2, (2,3):6, (3,3): 9 }
k_1x1x = ...
#assert k_1x1[(3,3)] == 9
Deltas von Messwerten **#
gegeben: Liste von Messwerten, z.B. eine Temperaturkurve;
gesucht: Liste der Deltas (der Unterschiede) zwischen je 2 Messwerten.
inverses Dict ***#
gegeben: ein Dict;
gesucht: das “inverse” Dict, das angibt, welcher Key auf einen bestimmten Value zeigt.
Klar: Da im Dict mehrere Keys den gleichen Wert haben können, muss das inverse Dict auf Mengen von Schlüsseln des Ursprungs-Dicts zeigen).
dct_bsp = { "eins": 1, "oans": 1, "zwoa": 2 }
dct_invers_dct_bsp = { 1: {"eins", "oans"}, 2: {"zwoa"} }
Eine etwas “nerdige” Lösung ist schon gegeben und sieht so aus:
dct_invers_dct = { zahl: { text for text, z in dct_bsp.items() if z == zahl } for zahl in dct_bsp.values() }
dct_invers_dct
{1: {'eins', 'oans'}, 2: {'zwoa'}}
Wie sieht eine Lösung aus, die konventionell ohne Comprehension gebaut ist?
Geburtstage im Mai ***#
Gegeben: Ein Dict von Geburtstagen.
Gesucht: Ein Dict, das zu jedem Monat angibt, wer in diesem Monat Geburtstag hat.
bd = { "Anna": "01.05.1998", "Ben": "27.05.1995", "Charly": "17.03.2001", "Dave": "3.5.1999" }
bd_month = { 5: [ "Anna", "Ben", "Dave" ], 3: [ "Charly" ] }
Aussprache von Zahlen ****#
gegeben: Das Dict Aussprache
enthält verschiedene Dicts, die die Aussprache einer Zahl in verschiedenen Sprachen beschreiben.
Gesucht: Für welche Zahlen ist in welcher Sprache die Aussprache angegeben?
# Bsp:
Aussprache = {
"EN": { 1: "one", 2: "two" },
"DE": { 1: "eins", 11: "elf" },
"RU": { 1: "один" }
}
Aussprache_keys_bsp = {
1: {"EN", "DE", "RU"},
2: {"EN"},
11: {"DE"}
}
Eine nerdige Lösung sieht so aus:
Aussprache_keys = { z: { Land for Land in Aussprache if z in Aussprache[Land] }
for z in { Zahl for Land in Aussprache.values() for Zahl in Land } }
Aussprache_keys
{1: {'DE', 'EN', 'RU'}, 2: {'EN'}, 11: {'DE'}}
Vorgehen für eine besser lesbare Lösung: ;-)
Set aller keys in Aussprache bestimmen (
{1, 2, 11}
), und da dann auch glieich ein initiales Dict daraus machen, mit leeren Mengen:Aussprache_keys == { 1:{}, 2:{}, 11:{} }
Für alle Länder in Aussprache: die entprechenden Aussprachen in die Mengen aus
Aussprache_keys
hinzufügen.
bruch2zahl **#
gegeben: In einer Anwendung seien Brüche als String gegeben, z.B. “3/4”.
Gesucht: Eine Funktion bruch2zahl()
, die den Wert eines Bruches als Kommazahl zurückgibt.
Lösung: siehe demo_2023-12-15
Zahlenliste runden ***#
Gegeben: eine “Sammlung” von Kommazahlen, die als Liste oder als Dict angelegt sein kann.
Gesucht: eine Funktions_rund()
, die die Zahlen dieser Sammlung auf 2 Nachkommaziffern rundet.
Schwierigkeit: Die Funktion soll mit einer Liste und einem Dict funktionieren.
Zahlen_bsp1 = [ 1, 0.693147181, 3.14149 ]
Zahlen_bsp2 = { "eins": 1, "ln2": 0.693147181, "pi": 3.14159 }
Zahlen_bsp1_gerundet = [ 1, 0.69, 3.14 ]
Zahlen_bsp2_gerundet = { "eins": 1.00, "ln2": 0.69, "pi": 3.14 }
geordnete Menge ***#
Gegeben: Eine Liste von ganzen Zahlen; gesucht: eine Funktion gm()
, die eine Liste dieser Zahlen zurückgibt, in der nur das jeweils erste Vorkommen jeder Zahl verzeichnet ist. (Das Ergebnis ist so etwas wie eine “geordnete Menge”).
zahlen_bsp = [ 3, 2, 2, 1, 2, 1, 4 ]
zahlen_bsp_gm = [ 3, 2, 1, 4 ]
Summe eines Baumes von Zahlen ***#
gegeben: Eine beliebig tief verschachtelte Liste von Listen (also ein Baum) von Zahlen.
Gesucht: Die Summe der darin enthaltenen Zahlen.
Palindrom *#
Gegeben: Ein String. Gesucht: Ist das ein Palindrom, d.h. lautet der String von vorne und von hinten gelesen gleich?