# Lösungen Extended Applications¶

### Aufgabe¶

3 Punkte

Schreibe einen Generator `square_count` mit einem Eingabeparameter `n`, welcher die Quadratzahlen von $1\dots n^2$ ausgibt.

Die Aufgabe gibt 0 Punkte, wenn die Funktion `square_count` kein Generator ist!

Hinweis: Bei Eingabe von `5` soll die Ausgabe `1 4 9 16` sein.

In [4]:

    def square_count(n: int) -> int:
        for i in range(1, n):
            yield i*i

    for n in range(2, 7):
        print(f"Square Numbers from 0 to {n-1}:", *square_count(n))

    Square Numbers from 0 to 1: 1
    Square Numbers from 0 to 2: 1 4
    Square Numbers from 0 to 3: 1 4 9
    Square Numbers from 0 to 4: 1 4 9 16
    Square Numbers from 0 to 5: 1 4 9 16 25

### Aufgabe¶

3 Punkte

Schreibe einen Generator `naturals`, welcher mit jedem Aufruf die nächste natürliche Zahl ausgibt. (Angefangen mit 1)

- Es sind keine Eingabeparameter notwendig.
- Ist die Funktion kein generator, wird diese Aufgabe mit 0 Punkten bewertet

Hinweis: Orientiere dich an dem Beispiel `faktoriel_gen`

In [6]:

    import types

In [10]:

    def naturals() -> int:
        curr = 1
        while 1:
            yield curr
            curr += 1

    gen: types.GeneratorType = naturals()
    for i in range(1, 10):
        number: int = next(gen)
        print(number, end=', ')

    1, 2, 3, 4, 5, 6, 7, 8, 9,

### Aufgabe¶

6 Punkte

Schreiben Sie eine Dataclass `Student`

- Die dataclass soll die Werte `vorname`, `nachname`, `semester` und `mat_nr` speichern, vergebe hierzu selber den !!geeigneten!! Datentypen. Mache dir dazu Gedanken ob es Sinnvoll beispielweise die Semesteranzahl als Float zu speichern.

- importiere aus dem dataclasses modul die Funktion `asdict`, erstelle ein Objekt mit den Werten aus dem Beispielstundent, weiße den rückgabewert aus `asdict` aufgerufen mit dem Beispielstudenten der Variablen `stud` zu.

- Die Aufgabe wird mit 0 Punkten bewertet, wenn `Student` keine dataclass ist!

- Hat einer der Attribute keinen geeigneten Datentypen, führt dies nicht zu Punktabzug bei zwei oder mehr schon.

Beispielstudent:

Attribut | Wert
--- | ---
vorname | Martin
nachname | Le
mat_nr | 520420
semester | 5

In [24]:

    from dataclasses import dataclass, asdict

    @dataclass
    class Student:
        vorname: str
        nachname: str
        mat_nr: int
        semester: int

    student = Student(
                vorname='Martin',
                nachname='Le',
                mat_nr=520420,
                semester=5)

    stud = asdict(student)

    from pprint import pprint
    pprint(stud, width=1)

    {'mat_nr': 520420,
     'nachname': 'Le',
     'semester': 5,
     'vorname': 'Martin'}

### Aufgabe¶

6 Punkte

Gegeben sind zwei Listen `colorn` & `colorv_hex`, welche zueinander Index Sortiert sind.

Schreiben nun eine Dataclass `Color` mit den Attributen `name` & `value` und vergebe geeignete Type Hints.

Erstelle danach eine Liste, welche die Werte aus `colorn` & `colorv_hex` in die Dataclass `Color` umwandeln, und speicher die Liste in der variablen `colors`.

In [17]:

    colorn = ['RED', 'GREEN', 'BLUE', 'YELLOW', 'PURPLE']
    colorv_hex = ['#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#FF00FF']

In [25]:

    colors = None

    @dataclass
    class Color:
        name: str
        value: str

    colors = [Color(n, w) for n, w in zip(colorn, colorv_hex)]

    pprint(colors)

    [Color(name='RED', value='#FF0000'),
     Color(name='GREEN', value='#00FF00'),
     Color(name='BLUE', value='#0000FF'),
     Color(name='YELLOW', value='#FFFF00'),
     Color(name='PURPLE', value='#FF00FF')]