Informatik Flashcards

1
Q

Was ist die Syntax einer Sprache?

A

grammatikalische Regeln, denen eine Sprache folgt

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Welche Elemente hat die Python-Syntax?

A

Literalte, Bezeichner, Schlüsselworte, Operatoren, Blöcke, Kommentare

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Was macht ein Bezeichner?

A

bezeichnet Variablen, Funktionen oder Datentypen. Sind Platzhalter für Dinge, die einen Wert haben können; Beginnen mit Buchstaben und stehen nicht in Anführungszeichen; Bsp. def bezeichner_name; bezeichner = 1

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Was macht ein Schlüsselwort?

A

haben eigene, unveränderliche Bedeutung und beginnen mit Buchstaben;
and, as, assert, async, break, continue, class, def, del, elif, else, if, false, for, from, in, is, not, or, ….

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Was macht ein Operator?

A

Verknüpft mehrere Ausdrücke zu einem neuen Ausdruck, sind Sonderzeichenketten oder Schlüsselworte; Bsp. () [] {} + - * / // < > => >= == != if else is not in

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Was ist ein Block?

A

Zusammenhängender Quelltext, der in Python druck einrücken und : gekennzeichnet wird

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Was ist ein Kommentar?

A

Beschreibt Code, beginnt mit # und Endet am Ende der Zeile

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Was ist ein Ausdruck?

A

Ein Ausdruck repräsentiert einen Wert, zu dem er Auswertet, er kann aus einem Literal, dem Bezeichner einer Variablen, einem Funktionsaufruf oder einem mit Operatoren zusammengesetzten Ausruck bestehen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Was gibt es für verschiedene Operatoren und was machen diese?

A

unärer Operator: haben einen Operanden -a
binärer Operator: verknüpfen zwei Operanden a+b
ternärer Operator: verknüpfen drei Operanden if..else..

Außerdem gibt es einen prefix, infix und postfix - Operator (vorne, mitte, hinten)

z.B. a+b binärer Infix-Operator; -a unärer Präfix-Operator

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Was bedeutet Operatorenpräzedenz?

A

Operatoren haben Präzedenzreihenfolge, in einer Reihe z.B. linksassoziativ; Veränderbar mit ()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Was sind Arithmetische Operatoren?

A

+ - * / % ** ~ //

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Was sind Bitoperatoren?

A

& (bitweises und) | (bitweises oder)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Was sind Bitoperatoren?

A

& (bitweises und) | (bitweises oder) ^ (bitweises entweder oder), bit-shift (&laquo_space;»)

Zahl in bitschreibweise (2^3 + 2^2 + 2^1 + 2^0) = 15
1 1 1 0 = 14
0 1 0 1 = 5
—————————————–
14&5 0 1 0 0 = 4
14|5 1 1 1 1 = 15
14«1 1 1 1 0 0 = 28
14»1 0 1 1 1 = 7

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Was sind Vegleichsoperatoren?

A

Vergleiche, einschließlich Test auf Inhalt und Identität:

in, not in, is, is not, , >=, !=, == -> Bsp. 3>10 -> false

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Was sind Boolsche Operatoren?

A

not, and, or true and false -> false; not false = true; true or false = true

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Konditionalausdrücke sind was?

A

Zusammengesetzte Operatoren und Zeichenketten:

“Apple” if 3<4 else “Banana” -> “Apple”, weil 3<4

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Ausdrücke mit Zeichenketten? Was für Unterschiede?

A

Konkatenation: “Hallo” + “Welt” -> “Hallo Welt”
Repetition: “Na” * 6 -> “NaNaNaNaNaNa”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Was ist die Zuweisung?

A

Ist ein Ausdruck, der einer Variablen mit dem Namen Bezeichner den Wert des Ausdrucks zuweist; Kann später im Programm überschrieben werden

a = 1

Modifizierte Zuweisung: a+=2, a-=2 a//=2, a*=2

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Was ist das Imperative Programmierparadigma?

A

Programm besteht aus Liste von Answeisungen, die nacheinander ausgeführt werden können; Anweisungen werden durch Zeilenumbrüche getrennt, es seidenn durch \ über mehrere Zeilen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Was ist eine Funktion? Welche Bestandteile?

A

Mehrere benötigte Anweisungen werden zu einer Prozedur zusammengefasst und mit Bezeichner benannt -> Funktion
Eine Funktion muss in dem Moment definiert sein, in dem sie aufgerufen wird, kann aber überschrieben werden

Funktionsaufruf: print(), funktion(Parameter)
Funktionsargumente: Argumente, die der Funktion beim Aufruf übergeben werden
Funktionsdefinition: def funktion(Parameter):

Leere Funktionen müssen mit pass gekennzeichnet werden, sonst gibt es einen Fehler (pass tut einfach nichts)

Funktionen können einen return-Wert besitzen (nach return wird Funktion verlassen)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Was sind optionale Parameter einer Funktion?

A

Verpflichtende Argumente: def funktion(name, nachname):
Beide Argumente sind beim Aufruf verpflichtend

Optionale Argumente: def funktion(name, nachname=”mahler”):
Wenn bei nachname nun nichts eingegeben wird, wird default-Wert “mahler” gesetzt, name ist verpflichtend; wird nachname übergeben, wird “mahler” überschrieben

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Details zur print()-Funktion?

A

print(“Hallo”, “du”, “Idiot”, sep=”-“, end=”!”)

-> Hallo-du-Idiot!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Was macht die Input-Funktion?

A

wert=input(“Sag dein Name!”)

-> Eingabe des wert

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Was für Kontrollstrukturen gibt es?

A

if, if else, elif, for, while

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Was macht die if-Kontrollstruktur?

A

Ausführung eines Codes findet nur statt, wenn if-Bedingung erfüllt wurde

if a>b:

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Was macht die if-Kontrollstruktur?

A

Ausführung eines Codes findet nur statt, wenn if-Bedingung erfüllt wurde

def max(a,b):
   if a>b:
      return a
   return b 

Gibt in Funktion a zurück, wenn a>b, ansonsten als default b, kann auch mit else geschrieben werden:

def max(a,b):
   if a>b:
      return a
   else:
      return b 

Zusätzlich kann elif (else..if) benutzt werden if…elif…elif…else

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Wie funktioniert eine for-Schleife?

A

for-Schleife führt Codeblock mehrfach aus und setzt dabei nacheinander Werte für die Schleifenvariable ein:

for wert in 100, 200, 500, 1000:
print(wert)
-> 100 200 500 1000 (untereinander)

break verlässt for-Schleife (Wenn ein Wert beim iterieren “gefunden” wurde)
continue springt zum Beginn des Schleifenkörpers zurück setzt nächsten Wert ein (Abbruch eines Durchgangs, Start neuer Durchgang)

for wert in range(5):
print(wert)
-> 0 1 2 3 4

for wert in range(3,7):
print(wert)
-> 3 4 5 6

for wert in range(3,8,2):
print(wert)
-> 3 5 7

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

Was macht for..else?

A

Führt else genau dann aus, wenn Schleife NICHT durch ein break verlassen wurde

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

Wie funktioniert die while-Schleife?

A

Führt Schleifenkörper so lange aus, bis Schleifenbedingung erfüllt ist

a=0
while a<3:
a+=1
-> geht durch while-Schleife, bis a=3, dann weiter

while…else:
a=4
while a<3:
a+=1
else:
print(“a war schon immer größer als 3)
-> geht direkt in else, da while einmal zu FALSE ausgewertet wurde

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

Wie funktioniert die while-Schleife?

A

Führt Schleifenkörper so lange aus, bis Schleifenbedingung erfüllt ist

while

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

Funktionen von Processing?

A

Initialisieren: def setup(): -> size()
Draw: def draw():

cicle(), text(), line(), rect()
stroke(), strokeWeight(), fill()

mousePressed(), mouseReleased(), mouseX(), mouseY(), hour(), minute(), second()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

Was ist ein Algorithmus?

A

ein Schema, mit dem wir den Lösungsweg für eine Problemstellung so aufschreiben, dass man Code schreiben kann, mit dem die Lösung berechnet werden kann

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

Was ist Iteration?

A

Manche Probleme lassen sich durch wiederholte gleichartige Berechnungen lösen. Eine einzelne Wiederholung berechnet man als Iteration, in Python while und for für Iterationen.

def fak_iterativ(n):
    akkum = 1
    for i in range(1,n+1):
        akkum = akkum * i    
    return akkum
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
33
Q

Was ist Rekursion?

A

Eine Funktion heißt rekursiv, wenn sie sich selbst aufruft, auch wenn das über mehrere Zwischenaufrufe von Funktionen passiert, die sich gegenseitig aufrufen

def fak_rekursiv(n):
    if n < 2:
        return 1
    return n * fak_rekursiv(n-1)

Die Anzahl der Selbstaufrufe können gezählt werden und werden als Rekursionstiefe bezeichnet, Python bricht ab einer bestimmten Rekursionstiefe ab

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
34
Q

Was ist Information?

A

Digitaler Speicher besteht aus Bits, die nur zwei Zustände unterscheiden können. (z.B. 0/1, wahr/falsch,..) Meist werden mehrere Bits zusammengefasst und als logische Einheit von Information betrachtet; n Bit Information unterscheidet dabei 2^n verschiedene Zuständen; Wenn man zwischen N verschiedenen Zuständen unterscheiden kann, besitzt man log2N an Information

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
35
Q

Was ist ein Datentyp?

A

Interpretation der Zustände entspricht dem Datentyp. Damit Operationen auf Werten überhaupt möglich sind, muss Python wissen, welchen Typs die als Bits im Speicher abgelegten Daten haben. Durch type() kann man sich den Typ ausgeben lassen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
36
Q

Was ist statische bzw dynamische Typisierung?

A

Unterschied zwischen statisch typisierten Programmiersprachen und dynamisch typisierten Sprachen. Statisch bedeutet, dass bereits zu dem Zeitpunkt, zu dem das Programm geschrieben ist, der Datentyp jeder Variable, jedes Ausdrucks bekannt sein kann. Dynamisch typisiert bedeutet, dass erst bei der Ausführung des Codes der Datentyp einer Variable feststeht. Python ist duck typed, erst wenn bei der Ausführung erkannt wird, dass eine Operation nicht möglich ist, gibt es einen Fehler.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
37
Q

Was ist ein Type hint?

A

Es gibt optionale type hints, die in Funktion bestimmten Datentyp erwarten.

def summe( a : int, b: int) -> int:
    return a + b
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
38
Q

Was ist der Bool´sche Datentyp?

A

Kennt nur Werte true und false; in Bedingungstests von if, while, sowie als Operand von or, and und not gibt es auch die Interpretation von anderen Typen als wahr und falsch; True entspricht allen ganzen Zahlen außer 0, False 0 und umgekehrt.

A and B entspricht B if A else A
A or B entspricht A if A else B`

Bsp. 3 and „Banana“ -> „Banana“, da Banana trueisch
„Banana“ and not „Cat“ or „Apple“ -> „Apple“
False + 0 -> 0, True + 0 -> 1

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
39
Q

Was ist der None-Type?

A

Wert None vom Typ NoneType, der signalisiert, dass ein Ausdruck keinen eigentlichen Wert hat.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
40
Q

Was sind ganze Zahlen (Type int)

A

Ganze Zahlen haben den Typ int, der nicht durch bit begrenzt ist, sondern wächst bis zum Füllen des Hauptspeichers an; die Division von zwei ganzen Zahlen liefert einen float-Wert zurück. Es seidenn man benutzt //

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
41
Q

Was sind Fließkommazahlen (Type float)?

A

Entsprechen dem Typ float; dargestellt mit . und nicht , 0.0 ist false, alles andere true

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
42
Q

Was sind komplexe Fließkommazahlen (Type complex)?

A

Basieren auf float, implizieren immaginäre Zahlen

1j*1j = (-1+0j) = -1

bei gemischten Operationen mit int oder float findet ein automatischer Cast auf complex statt

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
43
Q

Was sind Zeichenketten (Type str)?

A

Sind Unicode-basiert, erst bei Lesen und Schreiben von außen spielt das Encoding eine Rolle
“String” oder ‘String’

Mehrzeilige String-Literale können Zeilenumbrüche enthalten
"""Ein
String"""
'''Ein
String'''  -> 3x Anführungszeichen

Möchte man “ printen: print(“ ‘ “) oder print(‘ “ ‘)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
44
Q

Was gibt es für Sonderzeichen in einem String?

A

print(“C:\DOS>”) -> C:\DOS> -> \

print(“A\nha!”) -> A
ha! -> \n

print(“Eins\t1) -> Eins 1 ->\n (Tab)

wird vor den String ein r geschrieben, werden Sonderzeichen ignoriert print(r”1\n2) -> 1n\2

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
45
Q

Wie funktioniert Typumwandlung?

A

int(3.9) -> 3
int(“3”) -> 3
int(float(“3.9”))->3 !!hier muss “3.9” von str erst in float, dann in int umgewandelt werden

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
46
Q

Was ist eine lokale Variable?

A

Gleicher Name kann an verschiedenen Stellen im Quelltest auf verschiedene Speicherbereiche verweisen und unterschiedlichen Speicherbereichen zugeordnet sein. z.B. in

  • verschiedenen for-Schleifen
  • verschiedenen Funktionen

Dabei stellt die Variable dann eine lokale Variable dar, da sie nur innerhalb der Funktionen sichtbar sind; diese liegen im Stapelspeicher (Stack)

Möchte man in einer Funktion die außen stehende globale Variable verwenden, kann man global v benutzen, um diese zuzuweisen;

47
Q

Was ist eine globale Variable?

A

Globale Variablen sind über Funktionen hinaus sichtbar; benutzt jeweils den gleichen Speicher
Wenn die gleich benannte Variable einmal ausßerhalb und innerhalb einer Funktion auftauchen, wird in der Funktion die innerhalb der Funktion definierte Variable benutzt, diese verdeckt dann die globale Variable

48
Q

Was ist ein scope?

A

Sichtarbkeitsbereich, Python bewegt sich von innen nach außen, sucht zuerst innerhalb aktueller Funktion, dann in umgebenden Funktionen, dann im globalen scope, dann im built-in scope (print z.B.)

global legt fest, dass die Sucher erst im globalen Scope beginnt

49
Q

Kann man Variablen löschen?

A

Ja, mit del VARIABLE kann man die Variable löschen und so Speicher freigeben

50
Q

Was ist ein Modul?

A

Python hat auch schon im Auslieferungszustand zahlreiche Bibliotheken zur Verfügung, die als Module organisiert sind. Mit der import-Anweisung ermöglichen wir unseren Programmen den Zugriff:

import math (oder import math as m)

math.sin(math.pi) (oder m.sin(m.pi)

51
Q

Was ist ein Tupel?

A

Ein in Python eingebauter Container; ein Datentyp der mehrere Werte beinhaltet, nämlich Tupel (2), Tripel (3), …

a = (3, 4)
a = (“drei”, “vier”)
a, b = 3, “drei”

Tupel mit nur einem Element:
a = (“drei”,)

Zugriff auf Tupel:
tupel[0]
tupel[2:4] -> Index 2 und 3
tupel[-1] -> Letzter Eintrag

52
Q

Was haben Container für eingebaute Operationen?

A
  • a in b testet, ob eine Sequenz b den Wert a enthält
  • a not in b testet, ob eine Sequenz b den Wert a nicht enthält
  • == überprüft ob Länge gleich und jedes Element übereinstimmt
  • len(a) gibt Anzahl Elemente zurück
  • min(a) gibt kleinstes Element zurück
  • max(a) gibt größtes Element zurück
  • a.count(b) liefert zurück, wie oft es b in a gibt
  • a.index(b) liefert Index von b zurück
  • a+b erzeugt eine aus a und b aneinandergesetzte Sequenz
  • a*n erzeugt eine Sequenz, die a n-mal aneinandersetzt
53
Q

Wie iteriert man über Container?

A

zaehler = (‘eins’, ‘zwei’, ‘drei’, ‘los’)

for z in zaehler:
print(z,”!”)

eins !
zwei !
drei !
los !

54
Q

Wie kann man auf verschiedene Abschnitte eines Sequenztyps (Tupel ist z.B. ein Sequenztyp) zugreifen?

A
  • a[i:j] sind alle Elemente von i bis j (ausschließlich j)
  • a[i:j:k] sind alle k-ten Elemente (z.B. jedes zweite) von i bis j (ausschließlich)
  • a[:i] oder a[i:] alle Elemente bis i(ausschließlich) oder von i(einschließlich) ab
  • a[:] für alle Elemente
  • a[::-1] für alle Elemente in umgekehrter Reihenfolge
55
Q

Wie kann man einen Tupel mit range() initialisieren?

A

t = tuple(range(1,11))

56
Q

Wie kann man Strings slicen?

A

’’ in ‘team’ -> True
‘i’ in ‘team’ or ‘u’ in ‘team’ -> False
‘tea’ in ‘team’ -> True

t = ‘team’
print(t[0]) -> t

57
Q

Wie kann man Strings zusammensetzen?

A

” und “.join((“1”,”2”,”3”)) -> 1 und 2 und 3 String wird zwischen Elemente des Tupels gesetzt

58
Q

Wie kann man über Strings iterieren?

A
a = "123"
b = tuple(a) -> ("1","2","3")

oder

for x in "Zeichen":
    print(x) 
-> Z
    e
    i
    c
    h
    e
    n
59
Q

Wie initialisiert man eine Liste?

A

a = [1, 2, 3] -> [1, 2, 3]

list((1,2,3)) -> aus Tupel wird Liste

list(range(22)) -> [0, 1, 2, …, 21]

In Liste können mehrere Datentypen a = [“becher”, 3, 2.3]

60
Q

Welche Operationen kann man auf Listen ausführen?

A
  • liste.append(ELEMENT) fügt ELEMENT ans Ende von liste (z.B. auch ein ganzes Tupel als solches)
  • liste.remove(ELEMENT) entfernt ELEMENT aus Liste (Alle anderen folgenden Elemente “rutschen” auf)
  • liste.extend(ELEMENT) fügt Elemente von ELEMENT ans Ende von liste (z.B. die einzelnen Elemente von einem Tupel)
  • liste.sort() sortiert liste (z.B. Zahlen aufsteigend)
  • liste.clear() löscht alle Elemente von liste
  • liste.reverse() kehrt Reihenfolge von liste um
61
Q

Welche Operationen kann man auf Listen ausführen?

A
  • liste.append(ELEMENT) fügt ELEMENT ans Ende von liste (z.B. auch ein ganzes Tupel als solches)
  • liste.remove(ELEMENT) entfernt ELEMENT aus Liste (Alle anderen folgenden Elemente “rutschen” auf)
  • liste.extend(ELEMENT) fügt Elemente von ELEMENT ans Ende von liste (z.B. die einzelnen Elemente von einem Tupel)
  • liste.sort() sortiert liste (z.B. Zahlen aufsteigend)
  • liste.clear() löscht alle Elemente von liste
  • liste.reverse() kehrt Reihenfolge von liste um
62
Q

Wie kann man eine Liste verändern (zuweisen, entfernen)?

A
  • a[1] = “zwei” -> an Index 1 wird “zwei” als String gesetzt, das vorherige Element wird überschrieben
  • del a[0] -> Element an Index 0 wird entfernt, alle folgenden Elemente rutschen nach

a=list(range(100))
del a[:95] -> [95,96,97,98,99]

63
Q

Wie kann man Listen mit Sclicing zuweisen?

A
a = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
b = list(range(30))
b[3:25] = a[-3:]

b -> [0, 1, 2, ‘e’, ‘f’, ‘g’, 25, 26, 27, 28, 29] Ersetzt alle Zahlen von 3 bis 24 mit e, f, g

64
Q

Wie initialisiert man Mengen(set)?

A

a = {1,2,3} -> {1,2,3}
set() erzeugt eine leere Menge

Man kann nicht über Mengen iterieren und auch nicht die Reihenfolge der Elemente bestimmen

65
Q

Was für Operatoren kann man auf Mengen ausführen?

A
  • menge.add(ELEMENT)
  • menge.remove(ELEMENT)
  • menge.clear()
66
Q

Wie kann man Mengen miteinander vergleichen?

A
  • 1 in {1,2,3} -> True
  • {1,2}.issubset({1,2,3}) -> ist Teilmenge?
  • {1,2,3}.issuperset({1,2}) -> ist Übermenge?
  • {1, 2}.union({2, 3}) -> Vereinigungsmenge -> {1,2,3}
  • {1, 2}.intersection({2, 3}) -> Schnittmenge -> {2}
  • {1, 2}.difference({2,3}) -> Mengendifferenz -> {1}
67
Q

Was gibt es für Container- und Sequenztypen?

A
  • Tupel a=(2,3,4)
  • Listen list=[2,3,4]
  • Mengen men={2,3,4}
68
Q

Wie initialisiert man ein Dictionary?

A

d = { “1” : “Eins”, 2: “Zwei”, “three”: “Drei”}

Der vordere Wert ist der Schlüssel. Dieser kann unterschiedliche Datentypen haben

69
Q

Wie greift man auf ein Dictionary zu?

A

d = { “1” : “Eins”, 2: “Zwei”, “three”: “Drei”}

print(d[“three”])
print(d) -> Drei

70
Q

Wie fügt man ein Element zu einem vorhandenen Dictionary hinzu?

A

d = { “1” : “Eins”, 2: “Zwei”, “three”: “Drei”}

d[“4”] = 4 -> {‘1’: ‘Eins’, 2: ‘Zwei’, ‘three’: ‘Drei’, ‘4’: 4}

71
Q

Wie iteriert man über ein Dictionary?

A

d = { “1” : “Oise”, 2 : “Zwo”, “trois” : “Drei” }

for a in d:
print(a)

1
2
trois

  • > Schlüsselwörter werden ausgegeben

for a in d.values():
print(a)

Oise
Zwo
Drei

  • > Einträge zu Schlüsselwort werden ausgegeben

for a in d.items():
print(a)

(‘1’, ‘Oise’)
(2, ‘Zwo’)
(‘trois’, ‘Drei’)

-> Gesamter Eintrag als Tupel wird ausgegeben

ODER

for k,v in d.items():
    print(k," ",v)
1  Oise
2  Zwo
trois  Drei

-> Einträge werden als einzelne Variablen ausgegeben

72
Q

Was sind Iteratoren?

A

Ein Iterator ist ein Implementierungsmuster, bei dem man:

  • ein Element erhalten kann (durch Aufruf einer Mehtode next)
  • erfahren kann, dass keine weiteren Elemente zur Verfügung stehen

Iterierbare sind Typen, die einen Iterator erzeugen können, mit denen man sie aufzählen kann.

for…in mit einem einzelnen Ausdruck verwendet, wird der Ausdruck als Iterable aufgefasst, ein Iterator erzeugt, dan zählt die Schleife die Elemente darin auf.

Leere Iteratoren werden als falsch behandelt, nichtleere als wahr, deswegen macht for..else einen Sinn: Die Schleife wird durchlaufen, solange der Iterator wahr ist und wenn er falsch ist, der else Zweig.

73
Q

Was sind Generatoren?

A

Generatoren werden als Funktion geschrieben und enthalten mindestens ein yield-Statement. Damit kann man Iterierbare programmieren. Beispiel:

def example_generator():
    yield 1
    yield 2
    yield 3

kann dann in for-Schleife aufgerufen werden:

for i in example_generator():
print(i)

1
2
3

74
Q

Wie funktioniert yield in Generatoren?

A

Ausführung wird bei jedem yield angehalten und das Argument als Rückgabewert zurückgeliefert. Beim nächsten next-Aufruf des Iterators wird die Funktion an der Stelle, an der sie mit yield verlassen wurde, fortgesetzt, bis wieder ein yield-Statement erreich wird. Durch return erzeugt der Iterator ein StopIteration und die Iteration endet.

Man kann mit yield from iterierbare in den Ausgabestrom eines Generators einbetten:

def generator_mit_yield_from():
    yield "Test beginnt"
    yield from range(3)
    yield "Test ende"

for i in generator_mit_yield_from():
print(i)

liefert:
Test beginnt
0
1
2
Test ende
75
Q

Was gibt es für Builtins für Iterierbare?

A
  • min, max
  • sum (Summe der Elemente)
  • sorted (sortierte Liste der Elemente)

Iterierbare-Konverter:

  • reversed (ITERABLE) liefert Iterierbares zurück, was Elemente des übergebenen Iterators rückwärts aufzählt
  • enumerate(ITERABLE, start=0) liefert Iterierbares zurück, das Paare (Index, Element) mit aufsteigendem Ganzzahlindex erzeugt, start gibt ersten Index an
  • zip (ITERABLE1,ITERABLE2) liefert ein Iterierbares zurück, das Paare aus den Elementen der übergebenen Iterierbaren erzeugt

Logische Quantoren:

  • any(ITERABLE) liefert True zurück, falls eines der in Iterable enthaltenen Elemente logisch wahr ist, leer ist falsch
  • all(ITERABLE) liefert True zurück, falls alle der in ITERABLE enthaltenen Elemente logisch wahr ist, leer ist true
76
Q

Was gibt es für Zeichen bei Markdown?

A
  • Absatz: \
  • Hervorhebung: wort oder wort
  • Listen mit 1. 2. 3. …
  • Überschriften mit # ## ###
  • Tabellen: a|b|c
    |:–|:-:|–:|
    |links|zentriert|rechts
    |1|2|3|
  • Hyperlinks oder Name
  • Bilder
77
Q

Wie kann man Markdown in Quellcode einbinden bei Python?

A

```{.markdown}
text
~~~

```{.python}
code
~~~

78
Q

Wie kann man Strings mit f-String formatieren?

A

+ oder . join werden Strings konkateniert (Zusammengesetzt)

Schöner geht das aber mit f-Strings:

f”hier ist ein Text mit {a} Buchstaben und {b} Wörtern.”

Anstelle a oder b können Variablen benutzt werden, geschrieben mit “” oder ‘’

79
Q

Was macht .format bei String-Literalen? (Mit Dictionaries)

A

adresse = {“plz” : “66333”, “ort” : “Völklingen”, “state” : “Saarland”}

adress_lines = { “eins” : “Meine Adresse ist {plz} {ort} in {state}.”, “zwei” : Ich wohne im {state} in {ort} ({plz}).”}

print(“Nummer eins:”, adress_lines[“eins”].format(adresse)
print(“Nummer zwei:”, adress_lines[“zwei”].format(
adresse)

Nehme zwei Dictionaries und formatiere sie :)

80
Q

Was macht .format?

A

time = 9

“Es ist {} Uhr”.format(time)
‘Es ist 9 Uhr’

ODER

zahlen = [“Eins”, “Zwei”]

“Nach {} kommt {}”.format(zahlen)
“Nach {1} kommt {0}”.format(
zahlen)

ODER

“Nach {} kommt {}”.format(“müde”, “blöd”)

81
Q

Wie funktionien Feldbreiten in der Formatsprache?

A

rechtsbündig:
f”»{‘2’:10}<>2 <>{2:10}<> 2< kann man steuern, ob linksbündig, zentriert oder rechtsbündig:

f”»{2:<10}<>2 <>{2:^10}<> 2 <>{2:>10}<> 2<

82
Q

Wie formatiert man Zahlen in der Formatsprache?

A

f”{2:05}” -> 00002
mit Angabe der 0 vor der 5 wird mit 0 anstatt mit Leerzeichen aufgefüllt

f”{1:10}{-1:10}{1:+10}{-1:+10}{1:010}{1:+010}”
‘ 1 -1 +1 -10000000001+000000001’

f”{1} {-1} {1:+} {-1:+}”
‘1 -1 +1 -1’

83
Q

Wie kann man Fließkommazahlen formatieren?

A

f”{1/3}” -> 0,33333333333333333333
f”{1/3:g}” -> 0.333333
f”{1.0:g}” -> 1
f”{1:f}” -> 1.0

Feldbreite kombiniert mit Nachkommastellen:
f”{1/3:10.4} -> 0.3333 (links sind zehn Leerzeichen)

84
Q

Wie geht man mit Exceptions um?

A

try: blabla

except ValueError:

except NameError:

85
Q

Wie funktioniert else, finally in einem try-Block?

A
  1. try:
  2. else: wird genau dann ausgeführt, wenn try durchlaufen wurde und nicht durch Exception verlassen wurde
  3. finally: wird immer aufgerufen, auch wenn es einen Error gab

except nur, wenn Error auftritt

86
Q

Wie kann man eigene Exceptions werfen?

A

mit der raise-Anweisung mann man neue Exception werfen.

import math

def wurzel_von_zahl_minus_1(z):
if z <= 1.0:
raise ValueError(f”Die Funktion \
wurzel_von_zahl_minus_1 funktioniert nur mit Zahlen >= 1, \
nicht aber mit {z}”)
return math.sqrt(z-1)

wurzel_von_zahl_minus_1(0)

87
Q

Was macht assert?

A

Man überprüft, ob eine bestimmte Bedingung erfüllt ist, wenn diese nicht erfüllt ist, wird ein AssertionError ausgelöst.

assert True == True -> läuft
assert True == False -> Assertion Error

Es geht auch mit Fehlermeldung:

assert True == False, “Wie soll das gehen?!”

88
Q

Wie kann man Textdateien manuell lesen?

A
Ganze Datei:
f = open("assets/test.txt")
f.readline() liest einzelne Zeile
f.readlines() liest die Zeilen mit Umbrüchen etc
f.close() schließt Stream
89
Q

Wie kann man Dateien mit with-as lesen und schreiben?

A
with open("test.txt") as f:
    print(f)    

f ist iterierbar:
with open(file_name) as f:
for line in f:
print(line)

dann kann man Sachen rückwärts laufen lassen:
print(f”{line[::-1]}”)

90
Q

Wie kann man Textdateien geschickt schreiben?

A
with open(file_name, 'w') as f:
    f.write("Hello *Markdown*!\n")

oder schreiben und lesen gleichzeitig

with open("test.txt") as f:
    with open("flip.txt","w") as otherf:
        for line in f: 
            otherf.write(f"{line.rstrip()[::-1]}\n")
91
Q

Wie liest man CSV-Dateien manuell ein?

A
with open("assets/people.csv") as f:
    people = [ line.rstrip().split(';') for line in f] 

Pro Zeile wird nun eine Liste erstelt, die in die Liste people gespeichert wird

92
Q

Wie kann man CSV-Dateien mit dem CSV-Modul lesen?

A

import csv

with open("assets/people.csv") as csvfile:
    csv_reader = csv.reader(csvfile, delimiter=";")
    people = [row for row in csv_reader]

Optional kann als dialect z.B. “ecxel” angegeben werden, um dieses zu übernehmen

93
Q

Wie kann man CSV-Dateien mit CSV-Modul schreiben?

A
import csv
(people ist schon definiert und eine Liste)

with open(‘assets/test.csv’, ‘w’) as csvfile:
csv_writer = csv.writer(csvfile, dialect=”unix”)
for row in people:
csv_writer.writerow(row)

93
Q

Wie kann man CSV-Dateien mit CSV-Modul schreiben?

A
import csv
(people ist schon definiert und eine Liste)

with open(‘assets/test.csv’, ‘w’) as csvfile:
csv_writer = csv.writer(csvfile, dialect=”unix”)
for row in people:
csv_writer.writerow(row)

94
Q

Wie kann man JSON-Strings erzeugen?

A

import json

jspn.dumps((1,2,[3,4]))

oder als Dictionary:

json.dumps({ i*i : i for i in range(10) })

95
Q

Wie kann man in JSON schreiben?

A

t = json.loads(‘[1, 2, [“ahahaha”, 4]]’)
print(t)

-> schreibt Liste in t

generell mit json.dump() schreiben und json.load() lesen

96
Q

Wie durchsucht man Strings mit der re-Funktion (.search())?

A

import re

re. search(“a”, “Falafel”)
- >

alternativ kann man sich auch direkt den Span zurückgeben lassen

input_string = “Falafel”
matchresult = re.search(“la”, input_string)
print(matchresult.span())

-> (2,4)

97
Q

Wie kann man Strings mit der re-Funktion durchsuchen (.findall())?

A

re.findall(“a”, “Falafel”)
[‘a’, ‘a’]

-> liefert Liste mit gefundenen Strings

98
Q

Wie kann man Strings mit der re.Funktion durchsuchen (finditer())?

A

liefert einen Iterator über alle Match-Objekte zu den gefundenen Strings

for s in re.finditer(“a”, “Falafel”):
print(“Fand: “,s)

Fand:
Fand:

99
Q

Wie funktionieren Platzhalter in re-Funktion?

A

s = “Maier”

re. findall(“M.[ai]er”, s)
- > [“Maier], würde aber kein Meier finden

100
Q

Wie geht die Zeichenauswahl mit [] bei re?

A

re. search(“1[24680]”,”Es ist nicht 5, nicht 13, sondern 18 Uhr.”)
- >

Alle Zahlen in Klammern werden gesucht, wenn eine gematcht wird, wird das Objekt ausgegeben

re. search(“[f-t]”, “Musica”)
- > sucht nach Bereich

101
Q

Was gibt es für Charakterklassen in regulären Ausdrücken?

A

\s whitespace \S
\d Ziffer \D
\w Buchstabe \W

102
Q

Was sind die wichtigsten Funktionen der regulären Ausdrücke?

A

Metacharacters / Spezialsonderzeichen: ?+*.|[]{}()^$\

Quoting mit \
^ ist Stringanfang (Zeilenanfang mit optionalem Parameter re.MULTILINE)
$ ist Stringende (Zeilenende mit optionalem Parameter re.MULTILINE)
alles andere sind Literale

Konkatenation: Hintereinanderschreiben

Zeichenauswahl in [],

Komplement mit ^ als erstes Zeichen in […]
Bereich(e) mit -
Charakterklassen: \s, \d, \w, \S, \D, \W, .

Repetition: Wiederholung des vorangegangenen Teilausdrucks: ? 0- oder 1- mal, * mindestens 0-mal, + mindestens 1-mal:

{Anzahl}, {von,bis}
* (oder anderer Quantor) matcht greedy, *? (oder …?) lazy
Alternation: a|b als „entweder a oder b“

Präzedenz: Alternation | bindet schwächer als Konkatenation, Konkatenation schwächer als Repetition *,+,? - für alles andere gibt es Gruppen mit ( , )

103
Q

Was ist ein Seiteneffekt?

A

Eine programmierte Funktion, die einen äußeren Zustand verändert, bewirkt einen Seiteneffekt. Das heißt, sie kann globale Variablen verändern, obwohl man das vielleicht nicht möchte.

104
Q

Was bedeutet referentielle Transparenz?

A

Eine programmierte Funktion, deren Aufruf man durch ihr Ergebnis ersetzen kann, ohne den Effekt im Gesamtprogramm zu verändern, wenn man nur ihre Argumente kennt, heißt referentiell transparent.

Der Wert der Funktion ist also ausschließlich von ihren Übergabeparametern abhängig.

Insbesondere ist eine Funktion referentiell intransparent, wenn sie von globalen Variablen abhängig ist oder sie Eingaben entgegennimmt, die über Werte ihrer Parameter hinausgehen

105
Q

Was sind reine Funktionen?

A

Eine Funktion heißt reine Funktion, wenn sie keine Seiteneffekte bewirkt und referentiell transparent ist.

Mathematische Funktionen sind stets rein.

106
Q

Was ist ein Funktional? Oder Funktion höherer Ordnung?

A

Ein Funktional ist eine Funktion, die eine Funktion auf etwas abbildet oder eiwas auf eine Funktion/in einen Raum von Funktionen abbildet.

Beispiele:

  • ein Bild (das ist eine Funktion, die Pixelkoordinaten auf z.B. Helligkeit abbildet) auf die mittlere Helligkeit abbilden: dabei wird eine Funktion (das Bild) auf etwas abegbildet
  • aus Frequenz und Amplitude ein Sinus-Signal generieren: dabei werden zwei Sakalare quf eine Funktion abgebildet (die einen Zeitpunkt die Auslenkung zu dem Zeitpunkt abbildet)
  • ein Bild auf ein doppelt so helles Bild abbilden: dabei wird eine Funktion (das Eingabebild) auf eine andere (das Ausgabebild) abgebildet
107
Q

Wie funktionieren Lambda-Funktionen?

A

Mit Hilfe des lambda-Operators können anonyme Funktionen, d.h. Funktionen ohne Namen erzeugt werden. Sie haben eine beliebe Anzahl von Parametern, führen einen Ausdruck aus und liefern den Wert dieses Ausdrucks als Rückgabewert zurück.

f = lambda x, y : x + y
f(1,1)
2

108
Q

Was ist *args?

A
def var_args_funktion(farg, *args):
    print("Formales arg:", farg
    for arg in args:
        print("weiteres arg:", arg)
var_args_funktion(1, 2, "drei")
-->
Formales arg: 1
weiteres arg: 2
weiteres arg: drei

Wenn man noch nicht weiß, wie viele Argumente man übergeben möchte

109
Q

Was bedeutet funktionale Programmierung?

A

Funktionale Programmierung ist ein Programmierparadigma, innerhalb dessen Funktionen nicht nur definiert und angewendet werden können, sondern auch wie Daten miteinander verknüpft, als Parameter verwendet und als Funktionsergebnisse auftreten können. Dadurch kann ein funktionales Programm sehr weitreichend neue Berechnungsvorschriften zur Laufzeit zusammensetzen und anwenden. Programmiersprachen, die funktionale Programmierung ermöglichen, heißen funktional.

Die besonderen Eigenschaften der funktionalen Programmierung ermöglichen es, auf die in der imperativen Programmierung benötigten inneren Zustände eines Berechnungsprozesses ebenso zu verzichten wie auf die zugehörigen Zustandsänderungen, die auch Seiteneffekte genannt werden. Der Verzicht darauf vereinfacht auf der einen Seite die semantische Analyse eines Computerprogramms erheblich und eröffnet auf der anderen Seite weitreichende Möglichkeiten zur regelbasierten, algebraischen Programmtransformation und -synthese. Daraus ergibt sich die erhebliche praktische Bedeutung der funktionalen Programmierung für die Informatik.

110
Q

Wie kann man die Laufzeit messen?

A
def fib_5():
    return recursive_fib(5)

timeit. timeit(fib_5)
2. 5742798848077655

111
Q

Was sind Filter?

A

Mit filter(FUNCTION, ITERABLE) können wir iterierbare Variablen (z.B.: Listen, aber auch Range, oder eigene Generatoren, …) effizient auf die Elemente beschränken, die eine berechenbare Eigenschaft erfüllen

filter gibt ein Iterierbares zurück, das alle die Elemente des ITERABLE aufzählt, für die FUNCTION zu wahr auswertet:

def is_positive(i):
    return i > 0

for v in filter(is_positive,
[-2,1,-5,1,2,3.1415]):
print(v)

->>
1
1
2
3.1415
112
Q

Was sind Maps?

A

map(FUNCTION, *ITERABLES) wendet eine Funktion einzeln auf Tupel von Elementen aus den *iterables an und lässt uns darüber iterieren, wendet also die Abbildung („map“) FUNCTION auf die Inhalte an:

list( map(lambda x : x*x, range(5))
)
—>
[0, 1, 4, 9, 16]

Beispiel für mehrere Elemente aus Iterables:

tuple ( map (lambda a, b : a + b, [1,2,3], [4,5,6]) )
—>
(5, 7, 9)

113
Q

Was macht reduce?

A

functools.reduce(FUNCTION, ITERABLE, [INITIAL]) bildet eine „Zusammenfassung“ eines Iterierbaren, indem

  • falls vorhanden, der INITIAL-Wert mit dem ersten Element,
  • andernfalls die ersten beiden Elemente
    mit Hilfe der angegebenen Funktion verknüpft werden, dann das Ergebnis mit dem nächsten usw. bis die Sequenz vollständig verarbeitet ist. Dann erhält man das Ergebnis zurück.

functools.reduce( lambda a, b : a + b,
[1,2,9])
–>

12

functools.reduce( lambda a, b : a * b,
[4,5,6,7])
–>
840

functools.reduce( lambda a, b : a * b, b, [5,2], 10)

–>
100 (Startwert b, heißt 1052)