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')]