hue01-ml November 23, 2016 Bitte tragen Sie Ihre Matrikelnummern und E-Mail-Adressen zeilenweise in die Zelle oberhalb dieser Zelle ein. Beachten Sie: Die Abgabe muss mit Ihrem Gruppenaccount erfolgen, den Sie in der Präsenzübung erhalten haben! Abgaben, die über Ihren Einzelaccount erfolgen, werden ignoriert. Achten Sie dabei streng auf die Formatierung, denn die Auswertung erfolgt automatisch. Benutzen Sie keine Leerzeilen. Nur zwischen Matrikelnummer und E-Mail-Adresse darf ein Leerzeichen stehen. Format: MatrikelNummer E-Mail-Adresse z.B.: 123456 [email protected] Abgabe: 6.11., 23:59 0.1 Aufgabe 1: Boolesche Variablen und Vergleiche a) (1 Punkt) Die Variablen a, b und c sind boolesche Variablen unbekannter Belegung. Verkürzen Sie folgende boolesche Ausdrücke so weit wie möglich und geben Sie die Zwischenschritte an: ( (True or a ) and ( False or b) ) ( (a or b ) or ( False or b) ) (a or b) and (a or c) (a and (a or b)) and True a and b or b and c and (b or c) ( (True or a) and (False or b) ) = True and b = b ( (a or b ) or ( False or b ) ) = ( a or b ) or b = a or b ( a or b ) and ( a or c ) = a or (b and c ) (a and (a or b)) and True = ((a and a) or (a and b)) and True = (a or (a and b)) and True 1 = a and True = a a = = = and b or b and c and (b or c) (a and b) or ((b and c) and (b or c)) (a and b) or (b and c) b and (a or c) b) (1 Punkt) Nehmen Sie an, dass die Variablen a, b und c die folgenden Werte haben: a = True b = True c = False Welche Werte werden die Variablen d,e,f und g nach Ausführung des folgenden Codes haben? Versuchen Sie, die Aufgabe ohne Hilfe von Python zu lösen. d e f g = = = = b and c b or c not a and c (b and c) or not a d = False e = True f = False g= False c) (2 Punkte) Nehmen Sie die folgende Belegung an: a = b = c = d = foo 2 -1 "2" 0 = "foo" Welche der folgenden Bedingungen sind wahr? a < b (a < b) and d (a > b) or d b <= a b >= b b > d a != b b == -1 a == c c == "2" foo == "foo" 2 a < b (a < b) and d (a > b) or d b <= a b >= b b > d a != b b == -1 a == c c == "2" foo == "foo" 0.2 False False True True True False True True False True True Aufgabe 2: Variablen a) (2 Punkte) Welche der folgenden Namen für Variablen sind in Python gültig? Begründen Sie Ihre Antwort: or _or var var2 2var my_var dein-var • or Ist nicht gültig. or ist ein Schlüsselwort und darf nicht als Variablennamen verwendet werden. • 2var Ist nicht gültig, da es mit eine Zahl beginnt. • dein-var Ist kein gültiger Variablenname. Das “-” Zeichen darf nicht innerhalb eines Variablennamens verwendet werden. • Alle andere Variablennamen sind gültig. b) (2 Punkte) Benennen Sie die Typen der folgenden Variablen: a b c d e f g = = = = = = = type(a) type(b) type(c) type(d) type(e) type(f) type(g) 4 4.0 '4.0' False 'True' 'Test' int = = = = = = = int float str bool str str type 3 c) (2 Punkte) Führen Sie die folgenden Anweisungen hintereinander in Python aus und identifizieren Sie, welche falsch sind. Begründen Sie Ihre Antwort. 1d = 2 x = 2 y = X + 4 c = 4**3**2**3 _ = ((c-454)*c + 64)) rabat = 12% menge = 120.preis = 150e email = [email protected] and Haltbarkeitsdatum = 01.Nov.2017 class = 'Medizin, gr 2" continue_ = x > 0 1d = 2 # falsche Anweisung. Ein Variablenname # darf als erstes Zeichen keine Ziffer haben. x = 2 # richtige Anweisung y = X + 4 # falsche Anweisung, statt eines kleinen x # wurde ein großes X verwendet. # X ist hier nicht definiert. c = 4**3**2**3 # richtige Anweisung. Doppelte * definiert Potenzen _ = ((c-454)*c + 64)) # falsche Anweisung. Eine Klammer zuviel gesetzt. rabat = 12% # falsche Anweisung. Syntaxverletzung. # Das Prozentzeichen ist vom Datentyp str menge = 120.- # falsche Anweisung. Syntaxverletzung. preis = 150e # falsche Anweisung. Das e-Zeichen darf nicht # direkt an einen int Wert geschrieben werden. email = [email protected] # falsche Anweisung. Syntaxverletzung. # Eine Mail Adresse muss vom Typ str sein und # in Anführungszeichen geschrieben werden. and # falsche Anweisung. Syntaxverletzung. # Das Schlüsselwort "and" muss zwischen # zwei Ausdrücken stehen. Haltbarkeitsdatum = 01.Nov.2017 # falsche Anweisung. Syntaxverletzung. # 01.Nov.2017 ist vom Datentyp str und 4 # muss in Anführungszeichen geschrieben werden. class = 'Medizin, gr 2" '# falsche Syntax. Es fehlt ein schließendes # einfaches Anführungszeichen. # oder es wurde ein einfaches Anführungszeichen # mit einem doppelten verwechselt. # Zudem ist "class" ein Schlüsselwort und # darf nicht als Variablenname verwendet werden continue_ = x > 0 # richtige Anweisung. x ist definiert, # continue_ ist vom Typ bool und hat den Wert True 0.3 Aufgabe 3: Mathematische Operationen Mit Python kann man mathematische Ausdrücke auswerten lassen. Das wird durch die folgenden mathematischen Operatoren: +, -, *, /, Potenz (**) und Modulo (%) unterstützt. a) (2 Punkte) Sie möchten das Produkt von zwei Variablen a und b berechnen. Benennen Sie alles, was an der folgenden Implementierung falsch ist und erklären Sie kurz, wie man dies korrigieren kann: c = a*b a = 20 b = 66974 print(C) In [1]: a = 20 b = 66974 c = a*b print(c) 1339480 b) (2 Punkte) Schreiben Sie ein Programm, welches das Gesamtvermögen nach 3 Jahren bei einem Startkapital von 1000 Euro und einem Zinssatz von 5 % berechnet. Das Gesamtvermögen rechnet man mit der folgenden Formel aus: p n K 1+ , 100 wobei K, n und p entsprechend das Startkapital, Anzahl der Jahren und der Zinssatz sind. In [2]: K = 1000.00 n = 3 p = 5 # Startkapital # Anzahl der Jahre # Zinssatz G = K * ((1+(5/100)) * (1+(5/100)) * (1+(5/100))) print("Gesamtvermögen nach", n, "Jahren bei einem Startkapial von", K, "e und einem Zinssatz von",p, "% ist:", G) 5 Gesamtvermögen nach 3 Jahren bei einem Startkapial von 1000.0 e und einem Zinssatz c) (2 Punkte) Die folgende Funktion: " # 1 x−m 2 1 exp − f (x) = √ 2 s 2·π ist eine sehr wichtige Funktion in der Wahrscheinlichkeitstheorie und wird oft zur Beschreibung zufälliger Vorgänge benutzt (die Dichte einer normalverteilten Zufallsvariablen). Berechnen Sie diese Funktion in Python für die folgenden Parameter: m = 0, s = 1 und x = 10. √ Hinweis: Approximieren Sie π ≈ 3.14, exp(x) = 2.718x und für die x-Operation benutzen Sie x**0.5 in Python. In [3]: m = 0 s = 1 x = 10 pi = 3.14 exp_part = 2.718**(-1/2*((x-m)/s)**2) f = (1/(2*pi)**0.5)*exp_part print("Ergebniss:",f) Ergebniss: 7.736553948565042e-23 d) (2 Punkte) Sie möchten die folgenden Gleichungen in Python überprüfen: (a + b)2 = a2 + 2ab + b2 (a − b)2 = a2 − 2ab + b2 Ein Kollege von Ihnen hat dazu den folgenden Code geschrieben: a = 4.5 b = 7.7 sum_eq1 = a^2 + 2ab + b^2 sum_eq2 = a^2 - 2ab + b^2 pow_eq1 = (a + b)^2 pow_eq2 = (a - b)^2 print('Erste Gleichung:', sum_eq1, '=?', pow_eq1) print('Zweite Gleichung:', sum_eq2, '=?', pow_eq2) 6 Finden Sie die Fehler und schreiben Sie den korrigierten Code auf. In [4]: a = 4.5 b = 7.7 sum_eq1 = a**2 + 2*a*b + b**2 sum_eq2 = a**2 - 2*a*b + b**2 pow_eq1 = (a + b)**2 pow_eq2 = (a - b)**2 print('Erste Gleichung:', sum_eq1, '=?', pow_eq1) print('Zweite Gleichung:', sum_eq2, '=?', pow_eq2) print('Erste Gleichung ist gleich: ', round(sum_eq1,2) == round(pow_eq1,2)) print('Zweite Gleichung ist gleich: ', round(sum_eq2,2) == round(pow_eq2,2)) Erste Gleichung: 148.84 =? 148.83999999999997 Zweite Gleichung: 10.240000000000009 =? 10.240000000000002 Erste Gleichung ist gleich: True Zweite Gleichung ist gleich: True e) (2 Punkte) Die Lösungen der quadratischen Gleichung ax2 + bx + c = 0 kann man durch die folgende Formel finden: √ −b ± b2 − 4ac x1,2 = . 2a Finden Sie die Fehler in der folgenden Implementierung und schreiben Sie sie fehlerfrei: a = 2; b = 1; c = 2 D= (b**2 - 4*a*c)*0.5; x_1 = (-b + D)/2*a; x_2 = -(b + D)/2*a; print(x_1, x_2) In [5]: a, b, c = 2, 1, 2 D= (b**2 - 4*a*c)**0.5; x_1 = (-b + D)/(2*a); x_2 = -(b + D)/(2*a); print(x_1, x_2) (-0.24999999999999994+0.9682458365518543j) (-0.25000000000000006-0.9682458365518543 7