Materialien zu den zentralen NRW-Abiturprüfungen im Fach Informatik ab 2018 implementiert in Python.
Project description
pynrw
This package implements the datastructures given by the German state NRW in Python, thus futher documentation will be in German. This code is purely intended for educational purposes and should not be used in production!
Dieses Package dient alleine zu Bildungszwecken und sollte nicht in Produktion genutzt werden!
Dokumentation
Dieses Package implementiert die Datenstrukturen nach den Vorgaben des Landes NRW in Python, zu finden in nrw.datastructures
, d.s.:
Die Implementation ist semantisch identisch zu der Implementation des Landes mit dem einzigen Unterschied, dass alles mehr pythonic ist, d.h. die Benennung der Methoden folgt pep8
, Getter
und Setter
sind, wo es sinnvoll ist, in properties
transformiert und die Dokumentation (doc strings) sind ebenfalls angepasst worden.
Das Interface ComparableContent
ist ein gleichnamiges Protocol
, definiert in nrw.datastructures._comparable_content
. Es gibt die dunder special methods, __eq__
, __lt__
und __gt__
für einfache Vergleichsoperationen vor. Das Module stellt auch ein TypeVar
(https://docs.python.org/3/library/typing.html#typing.TypeVar) ComparableContentT
zur Verfügung.
Außerdem implementieren die linearen Datenstrukturen __str__
, welches das Arbeiten mit diesen deutlich vereinfacht.
Des weiteren sind (triviale) Optimierungen vorgenommen worden:
- Verwendung von
__slots__
- redundante Aufrufe werden weggelassen
- interne Optimierungen bei Zuweisungen
Zusätzlich enthält dieses Package nützliche Funktionen zum Sortieren, Suchen und Traversiern, zu finden in nrw.algorithms
:
linear_search
depth_first_search
breadth_first_search
bubble_sort
selection_sort
insertion_sort
merge_sort
quick_sort
preorder
inorder
reverse_inorder
postorder
levelorder
Allerdings muss annotiert werden, dass aufgrund den Natur der Datastrukturen, wie sie vom Land vorgegeben werden, die Laufzeiten nicht optimal sind. Zudem kann es zu ungewollten Nebeneffekte für die Argumente kommen. Welche dies sind, wird dem Leser als Übung überlassen. Es soll nicht vor einem Blick in den Quellcode zurückgeschreckt werden.
Für Hilfe zum jeweiligen Objekt (gilt für alle oben genannte Objekte), z.B.:
from nrw.datastructures import List
help(List)
help(List.insert)
Installation
pip install pynrw
Alternativ:
pip install git+https://github.com/realshouzy/pynrw.git
Beispiel
from nrw.algorithms import quick_sort
from nrw.datastructures import List
lst: List[int] = List()
for i in range(0, 10, -1):
lst.append(i)
print(lst.content) # None
lst.to_first()
print(lst.content) # 9
print(lst) # List(9 -> 8 -> 7 -> 6 -> 5 -> 4 -> 3 -> 2 -> 1 -> 0)
sorted_lst: List[int] = quick_sort(lst)
sorted_lst.to_first()
print(sorted_lst.content) # 0
print(sorted_lst) # List(0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9)
Motivation
Vereinfacht: Java, als Programmiersprache in der Bildung, ist eine schlechte Wahl, da ...
- Java veraltet ist.
- das rein objekt-orientierte Paradigma schlechthin unbrauchbar ist.
- die Syntax und und die statische Typisierung für Anfänger einschränkend sein können.
Diese Probleme und Hürden werden größtenteils mit Python überwunden.
Unterstützung
Jegliche Form der Unterstützung ist willkommen. Für mehr Informationen referiere ich hierhin.
Quellen
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.