# Basics & Zahlentypen¶

Aufgabe: Geben Sie den Text `Hallo Python` aus.

In [1]:

    print("Hallo Python")

    Hallo Python

Aufgabe: Definieren Sie zunächst die zwei Variablen `a` und `b` und initialisieren diese mit einem Integerwert ungleich `0`:

In [2]:

    a = 1
    b = -2

Aufgabe: Definieren Sie zwei Variablen `s` und `t` und initialisieren diese mit einem Floatwert ungleich `0`:

In [3]:

    s = 1.5
    t = -2.7

Aufgabe: Addieren Sie die Werte der Variablen `a` und `b` und speichern Sie das Ergebnis in der Variable `c`:

In [4]:

    c = a + b
    c

Out[4]:

    -1

Aufgabe: Nutzen Sie die Variablen `a` & `b` und Speichern Sie die Ergebnisse für die Multiplikation, Division, Ganzzahldivision, Exponentiation und den Modulo-Operator in den unten angegebenen Variablen:

\begin{align} m &= a\cdot b\\ d &= \frac{a}{b}\\ i &= \lfloor\frac{a}{b}\rfloor\\ e &= a^b\\ r &= a\; \textrm{mod}\; b \end{align}

In [7]:

    m = a*b
    d = a/b
    i = a//b
    e = a**b
    r = a%b

    print(m, d, i, e, r, sep='\n')

    -2
    -0.5
    -1
    1.0
    -1

Aufgabe: Ein String-Objekt (Text) können sie mit Hilfe von `'Some Text'` oder `"Some Text2"` definieren. Definieren sie die Variable `text` mit einem beliebigen Text.

In [9]:

    text = "Hi Mom, I am on TV!"
    text

Out[9]:

    'Hi Mom, I am on TV!'

Aufgabe: Geben Sie die Variablen `a` & `b` aus Aufgabe 1 im format `"a = 12 und b = 12"` (Die Werte sollen dann den Werten aus ihrer Definition entsprechen. 12 ist hier nur ein Beispiel) aus.

In [10]:

    print("a = {} und b = {}".format(a, b))

    a = 1 und b = -2

In [13]:

    print(f"a = %d und b = %d" % (a, b))

    a = 1 und b = -2

In [14]:

    print(f"a = {a} und b = {b}")

    a = 1 und b = -2

# Listen¶

Aufgabe: Definieren Sie die Variable `l` und weisen Sie dieser Variable eine Liste mit aufsteigenden Integerwerten von `0` bis `4` zu.

In [16]:

    l  = list(range(5))
    l

Out[16]:

    [0, 1, 2, 3, 4]

In [22]:

    l = [0, 1, 2, 3, 4]
    l

Out[22]:

    [0, 1, 2, 3, 4]

Aufgabe: Hängen Sie der Liste `l` noch den Wert `42` an.

Hinweis: Nutzen Sie dafür die Methode .append.

In [23]:

    l.append(42)
    l

Out[23]:

    [0, 1, 2, 3, 4, 42]

Aufgabe: Geben Sie das dritte Element der Liste `l` aus.

Hinweis: Achten Sie darauf das der erste Index immer `0` ist.

In [24]:

    l[2]

Out[24]:

    2

Aufgabe: Geben Sie das vorletzte Element der Liste `l` aus.

Hinweis: Achten Sie darauf das der letzte Index mit `-1` ausgegeben wird

In [25]:

    l[-2]

Out[25]:

    4

# Dictionaries¶

Aufgabe: Initialisieren Sie die Dictionary Variable `my_dict` mit folgendem Mapping:

Key | Value
--- | ---
`"apple"` | `"Apfel"`
`"banana"` | `"Banane"`
`"cherry"` | `"Kirsche"`

In [26]:

    my_dict = {"apple": "Apfel", "banana": "Banane", "cherry": "Kirsche"}

Aufgabe: Fügen Sie nun das Key-Value Paar `"pear": "Birne"` zu `my_dict` hinzu.

In [27]:

    my_dict["pear"] = "Birne"
    my_dict

Out[27]:

    {'apple': 'Apfel', 'banana': 'Banane', 'cherry': 'Kirsche', 'pear': 'Birne'}

In [30]:

    my_dict.update({"pear": "Birne"})
    my_dict

Out[30]:

    {'apple': 'Apfel', 'banana': 'Banane', 'cherry': 'Kirsche', 'pear': 'Birne'}

Aufgabe: Geben Sie die nur die Werte des Dictionaries `my_dict` aus.

In [31]:

    print(my_dict.values())

    dict_values(['Apfel', 'Banane', 'Kirsche', 'Birne'])

Aufgabe: Geben Sie die Elemente des Dictionaries `my_dict` mit der Funktion `.items()` aus.

In [32]:

    print(my_dict.items())

    dict_items([('apple', 'Apfel'), ('banana', 'Banane'), ('cherry', 'Kirsche'), ('pear', 'Birne')])

# Funktionen¶

Aufgabe: Schreibe eine Funktion `successor` die auf jede Eingabe `+1` rechnet.

In [34]:

    def successor(n: int) -> int:
        return n+1

    successor(1)

Out[34]:

    2

Aufgabe_ Schreibe eine Funktion `add` mit den Eingabeparametern `a` & `b`, welche die Werte von `a` & `b` miteinander addiert.

In [36]:

    def add(a: int, b: int) -> int:
        return a+b

    add(2, 3)

Out[36]:

    5

# Kontrollstruckturen¶

Aufgabe: Schreibe eine Funktion `is_odd` mit einem Eingabeparameter `n` die prüft ob die eingegebene Zahl ungerade ist.

Wenn die Zahl gerade ist gebe den Text `"Gerade Zahl"` und bei ungerade `"Ungerade Zahl"` zurück.

In [37]:

    def is_odd(n):
        if n % 2 == 0:
            return "Gerade Zahl"
        else:
            return "Ungerade Zahl"

    print(is_odd(8), is_odd(7), sep='\n')

    Gerade Zahl
    Ungerade Zahl

Aufgabe: Schreibe eine Funktion `faktoriel` mit Eingabeparameter `n`, welche die Fakultät der Zahl `n` berechnet. Dabei ist die Fakultät definiert als

$$f(n) = n! = 1 \cdot 2 \cdot 3 \cdot ... \cdot n-1 \cdot n$$

Ein Beispiel für die Zahl 5:

$$5! = 1 \cdot 2 \cdot 3 \cdot 4 \cdot 5$$ $$\Rightarrow 5! = 2 \cdot 3 \cdot 4 \cdot 5$$ $$\Rightarrow 5! = 6 \cdot 4 \cdot 5$$ $$\Rightarrow 5! = 24 \cdot 5$$ $$\Rightarrow 5! = 120$$

Für den Fall `n=0` ist $0!=1$ für negative (-1) und gebrochene Zahlen (3.14) ist die Fakultät nicht definiert, gebe daher für die Spezialfälle `-1` zurück.

In [39]:

    def faktoriel(n: int) -> int:
        if not isinstance(n, int):
            return -1
        if n < 0:
            return -1
        if n == 0:
            return 1

        count = 1
        while n > 0:
            count *= n
            n -= 1
        return count

    faktoriel(5)

Out[39]:

    120

Aufgabe: Schreibe eine Funktion `sum_up`, mit Eingabeparameter `n`, die einen `for`-loop implementiert, welcher die Zahlen von `1...n` aufsummiert.

Hinweis: die Funktion `range()` zählt standardmässig von `0...n-1`. Schauen Sie sich gerne dazu die offizielle Dokumentation an PEP 204.

In [41]:

    def sum_up(n: int) -> int:
        count = 0
        for i in range(1,n+1):
            count += i
        return count

    sum_up(100)

Out[41]:

    5050

Nach Gauß ist: $$\sum_{k=1}^n k = \frac{n(n+1)}{2}$$ Dementsprechen ist dies eine Lösung ohne For Loop:

In [45]:

    def sum_up(n: int) -> int:
        return int(n*(n+1)/2)

    sum_up(100)

Out[45]:

    5050

Aufgabe: Ihnen ist ein Dictionary gegeben. Ändern Sie jeden Wert in dem Dictionary nach der Formel $f(x) = x^3-1$ mittels `for-loop`.

Tipp: Lassen Sie sich nicht von den Schlüsseln verwirren.

In [51]:

    dictionary = {"a": 56, 5: 12, "python": 9, 3.14: 1.141414}

    for key, value in dictionary.items():
        dictionary[key] = value**3-1

    dictionary

Out[51]:

    {'a': 175615, 5: 1727, 'python': 728, 3.14: 0.48706374396146557}

In [52]:

    dictionary = {"a": 56, 5: 12, "python": 9, 3.14: 1.141414}

    dictionary = {key: value**3-1 for key, value in dictionary.items()}

    dictionary

Out[52]:

    {'a': 175615, 5: 1727, 'python': 728, 3.14: 0.48706374396146557}

Zusatzaufgabe: Erstellen Sie eine List mittels List Comprehension, welche die Zahlen `1...6` auf deren kubische Zahl `1...216` also der Funktion $f(x) = x^3$ abbildet

In [47]:

    cubics = [n**3 for n in range(1,7)]
    cubics

Out[47]:

    [1, 8, 27, 64, 125, 216]

Aufgabe: Gegeben sei ein Loop, welcher auf ein `IndexError` beim ausführen stößt. Verhindern Sie mittels `try-except` das dieser Loop einen Fehler wirft.

In [48]:

    l = [2**n for n in range(10)]
    s = list()
    f = lambda l, i: l[i] - l[i+1]

    for i in range(len(l)):
        try:
            s.append(f(l,i))
        except:
            continue

    s

Out[48]:

    [-1, -2, -4, -8, -16, -32, -64, -128, -256]

# Inputs¶

Aufgabe: Schreibe ein Programm, welches den Input vom User als eine Zahl entgegen nimmt und diese Zahl+2 zurückgibt.

Wichtig ist das der Wert als String zurückgegeben wird und vorher mittels `int()` Funktion zu einer Zahl umgewandelt werden muss.

In [ ]:

    a = int(input("Sag mir eine Zahl"))
    print(a+2)

Aufgabe: Erstellen und Öffnen sie eine Datei `testfile.txt` mit der `open` Funktion, nutzen Sie dafür das `with`-Statement. Schreiben Sie in diese Datei 100 mal den String `Python\n`.

In [54]:

    with open('testfile.txt', 'w') as f:
        for _ in range(100):
            f.write("Python\n")

Aufgabe: Öffnen Sie die zuvor erstellte Datei `testfile.txt` im Lesemodus und weißen Sie den Inhalt der `.readlines()` Funktion der Variabeln `lines` zu.

In [57]:

    lines = None

    with open('testfile.txt', 'r') as f:
        lines = f.readlines()

    print("Länge:", len(lines))
    print("Erstes Element:", lines[0])

    Länge: 100
    Erstes Element: Python

Alternative ohne `with` Statement:

In [62]:

    lines = None

    f = open('testfile.txt', 'r')
    lines = f.readlines()
    f.close()

    print("Länge:", len(lines))
    print("Erstes Element:", lines[0])

    Länge: 100
    Erstes Element: Python

# Import¶

Aufgabe: Importiere Python Built-In Library `random` und rufe zuerst aus dem Modul die Funktion `seed` auf mit dem Eingabewert `42`, und weiße danach der Variable `rand` den Wert des Funktionsaufrufes von `randint(1,100)` zu.

In [58]:

    rand = None

    import random
    random.seed(42)
    rand = random.randint(1,100)

    rand

Out[58]:

    82

Aufgabe: Importieren Sie die Built-In Library `datetime` als `dt`.

In [60]:

    import datetime as dt

    dt

Out[60]:

    <module 'datetime' from '/usr/lib/python3.11/datetime.py'>

Aufgabe: Importieren Sie die Funktion `sqrt` aus dem Built-In Modul `math`.

In [61]:

    from math import sqrt

    sqrt

Out[61]:

    <function math.sqrt(x, /)>