Skip to main content

Materialien zu den zentralen NRW-Abiturprüfungen im Fach Informatik ab 2018 implementiert in Python.

Project description

pynrw

pre-commit.ci status pylint status test status CodeQL PyPI - Version Python versions semantic-release PyPI - Format License: MIT Ruff Style: black Imports: isort

This package implements the datastructures, database and network classes 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!

Installation

pip install pynrw

Alternativ:

pip install git+https://github.com/realshouzy/pynrw

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)

Dokumentation

Datenstrukturen

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 ComparableContentT zur Verfügung.

Außerdem implementieren die Datenstrukturen __str__, welches das Arbeiten mit diesen deutlich vereinfacht (besonders für Binary(Search)Tree) und __repr__, welches eine grobe Idee der internen Strukture gibt, z.B.:

from nrw.datastructures import BinarySearchTree

bst: BinarySearchTree[int] = BinarySearchTree()
bst.insert(3)
bst.insert(2)
bst.insert(5)
bst.insert(0)
bst.insert(1)
bst.insert(4)
print(bst)
#       3__
#      /   \
#   __2     5
#  /       /
# 0       4
#  \
#   1

Des weiteren sind (triviale) Optimierungen vorgenommen worden:

  • Verwendung von __slots__
  • redundante Aufrufe werden weggelassen
  • interne Optimierungen bei Zuweisungen

Algorithmen

Zusätzlich enthält dieses Package nützliche Funktionen zum Sortieren, Suchen und Traversiern, zu finden in nrw.algorithms:

Die verschiedenen Traversierungen unterstützen auch Umkehrung. Allerdings muss annotiert werden, dass aufgrund der Vorgaben des Landes die Laufzeiten nicht optimal sind. Zudem kann es zu ungewollten Nebeneffekte kommen. Welche dies sind, wird dem Leser als Übung überlassen.

Datenbankklassen

Analog zu den Datenstrukturen sind auch Datenbankklassen größtenteils semantisch identisch zur den Vorgaben des Landes. Die jeweiligen Klassen sind in nrw.database definiert:

Hierbei ist zu beachten, dass der DatabaseConnector für MSAccess den Microsoft Access Driver benötigt und passwortgeschützte Datenbanken nicht unterstüzt. Des weiteren gilt für QueryResult, dass die Daten und die Spaltentypen nicht unbedingt als String wiedergegeben werden. Die Daten werden als Python-Äquivalenten Datentypen wiedergegeben, und für die Spaltentypen gilt:

  • SQLite: immer None, da SQLite dynamisch typisiert ist
  • MySQL: die entsprechenden Datentypen von MySQL als String
  • MSAccess: die entsprechenden Datentypen (Klassen) von Python

Netzklassen

Die Netzklassen sind ebenfalls semantisch identisch zu den Netzklassen des Landes. Diese sind in nrw.network zu definiert:

Die letzteren beiden sind ABCs. Bei diesen weicht die interne Implementation von der Java Implementation des Landes ab, da deren Ansatz nicht eins-zu-eins in Python übertragen werden kann; somit ist der Quellcode für Fortgeschrittene, v.a. der Quellcode des Servers. Nichtsdestotrotz ist die Anwendung und der Funktionsumfang der Selbe wie vom Land.

Allgemein

Mir ist bewusst, dass manche Klassen wie QueryResult oder auch die Nodes sich besser als dataclasses eignen. Allerdings können die Docstrings so nicht für alle Methoden und Properties gesetzt werden.

Für mehr Information zu einem beliebigen Objekt kann help genutzt werden, z.B.:

from nrw.datastructures import List
help(List)
help(List.insert)

Es soll nicht vor einem Blick in den Quellcode zurückgeschreckt werden.

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pynrw-1.5.2.tar.gz (6.9 kB view details)

Uploaded Source

Built Distribution

pynrw-1.5.2-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

File details

Details for the file pynrw-1.5.2.tar.gz.

File metadata

  • Download URL: pynrw-1.5.2.tar.gz
  • Upload date:
  • Size: 6.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.4

File hashes

Hashes for pynrw-1.5.2.tar.gz
Algorithm Hash digest
SHA256 58426ea41563f37d774296a4a621646b77cfff3bf91327bc19519a321a10cd8b
MD5 ea881dee1084be1dac42da4fae87a382
BLAKE2b-256 d226d6495d65fef63aecd19714c40c55809687ba3752c8e988130185345415d3

See more details on using hashes here.

File details

Details for the file pynrw-1.5.2-py3-none-any.whl.

File metadata

  • Download URL: pynrw-1.5.2-py3-none-any.whl
  • Upload date:
  • Size: 6.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.4

File hashes

Hashes for pynrw-1.5.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7d46bb6f26aee23b23558c4b884c503027a1a10d3b1282d5edb4b1e9a2667dae
MD5 ac51f362b2e28f21112d88d72ccbd2c7
BLAKE2b-256 73bbf161859ca498e520cbcd9134000f0f0fde12f89543a365ec6602356ff5bc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page