Skip to content

Commit

Permalink
cleanup because of impending testing phase
Browse files Browse the repository at this point in the history
_old even more reformatted
new version significantly cleaned, reduced duplicate code, prettified, broken up in smaller functions
  • Loading branch information
LittlePlanlessFool authored Feb 16, 2023
1 parent 30311b7 commit ba88be1
Show file tree
Hide file tree
Showing 3 changed files with 155 additions and 140 deletions.
2 changes: 1 addition & 1 deletion kurse.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<kurse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="kurse.xsd" size="112">
xsi:noNamespaceSchemaLocation="kurse.xsd" size="112">
<kurs id="1a">
<leistungskurs1>ENGLISCH</leistungskurs1>
<leistungskurs2>DEUTSCH</leistungskurs2>
Expand Down
179 changes: 80 additions & 99 deletions kurswahl.py
Original file line number Diff line number Diff line change
@@ -1,107 +1,88 @@
"""very bad, but iiwdfi
"""
"kurswahl.py"

import os
import sys
from xml.dom import minidom


class Kurswaehler:
"""TODO: fix repitition of if statements"""
def matches(element: minidom.Element, choices: list[str]) -> bool:
"""helper function, checks if -element-'s subelements contain the same
respective string as -choice-'s elements"""
names = (
"leistungskurs1",
"leistungskurs2",
"prüfungsfach3",
"prüfungsfach4",
"prüfungskomponente5",
)
clap = []

for i, choice in enumerate(choices):
clap.append(element.getElementsByTagName(names[i])[0].childNodes[0].nodeValue == choice)
return all(clap)


def printem(element: minidom.Element):
"""helper function, prints the values of -element-'s subelements"""
print(
f"""
matched:
{element.getAttribute('id')}
---
{element.getElementsByTagName('leistungskurs1')[0].childNodes[0].nodeValue}
{element.getElementsByTagName('leistungskurs2')[0].childNodes[0].nodeValue}
{element.getElementsByTagName('prüfungsfach3')[0].childNodes[0].nodeValue}
{element.getElementsByTagName('prüfungsfach4')[0].childNodes[0].nodeValue}
{element.getElementsByTagName('prüfungskomponente5')[0].childNodes[0].nodeValue}
--------"""
)


def query():
"side effecting, blobby"

os.system("cls || clear")
found, courses = [], []

dommy = minidom.parse(
os.path.join(
os.path.dirname(os.path.abspath(__file__)),
"kurse.xml",
)
).getElementsByTagName("kurs")

print(
"""AFII entspricht Geografie, Geschichte, Politikwissenschaften
NW entspricht Physik, Chemie, Biologie
Fremdsprachen entspricht Englisch, Französisch, Latein, Spanisch
""")

def __init__(self):
self.nextcourse = {"Englisch", "Mathematik", "NW", "Deutsch"}

self.read_lk1 = lambda node: (node
.getElementsByTagName('leistungskurs1')[0]
.childNodes[0]
.nodeValue
)
self.read_lk2 = lambda node: (node
.getElementsByTagName('leistungskurs2')[0]
.childNodes[0]
.nodeValue
)
self.read_pf3 = lambda node: (node
.getElementsByTagName('prüfungsfach3')[0]
.childNodes[0]
.nodeValue
)
self.read_pf4 = lambda node: (node
.getElementsByTagName('prüfungsfach4')[0]
.childNodes[0]
.nodeValue
)
self._query()

def _clear(self):
os.system('cls||clear')
if self.nextcourse:
self.nextcourse.clear()
"""Kurs 1: Englisch, ...
Kurs 2: Mathematik, ...
Kurs 3: NW, ...
Kurs 4: Deutsch, ..."""
)

for i in range(4):
courses.append(
input(
f"""Wählen Sie ein Fach an der {i + 1}ten Position
aus einem der obenstehenden Kurse.\n"""
).upper()
)
os.system("cls || clear")

if not found:
found = [elli for elli in dommy if matches(elli, courses)]
else:
print("Sie hatten einen Schreibfehler. Starten Sie das Programm neu.")
input()
sys.exit()

def _printem(self, node):
print(f"""
----- Passender Kurs -----
{node.getAttribute('id')}
{self.read_lk1(node)}
{self.read_lk2(node)}
{self.read_pf3(node)}
{self.read_pf4(node)}
{node.getElementsByTagName('prüfungskomponente5')[0].childNodes[0].nodeValue}
""")

def _query(self):

os.system('cls||clear')

# load document into RAM
document = (minidom
.parse(
os.path.join(os.path.dirname(os.path.abspath(__file__)), 'kurse.xml')
)
)
self.elements = document.getElementsByTagName('kurs')

self.lk1 = input(f"Wählen Sie den ersten Leistungskurs: {self.nextcourse}\n").upper()
self._clear()
for node in self.elements:
if self.read_lk1(node) == self.lk1:
self.nextcourse.add(self.read_lk2(node))


self.lk2 = input(f"Wählen Sie den zweiten Leistungskurs aus einem der folgenden Kurse: {self.nextcourse}\n").upper()
self._clear()
for node in self.elements:
if (self.read_lk1(node) == self.lk1 and
self.read_lk2(node) == self.lk2):
self.nextcourse.add(self.read_pf3(node))

self.pf3 = input(f"Wählen Sie das dritte Prüfungsfach aus einem der folgenden Kurse: {self.nextcourse}\n").upper()
self._clear()
for node in self.elements:
if (self.read_lk1(node) == self.lk1 and
self.read_lk2(node) == self.lk2 and
self.read_pf3(node) == self.pf3):
self.nextcourse.add(self.read_pf4(node))

self.pf4 = input(f"Wählen Sie das vierte Prüfungsfach aus einem der folgenden Kurse: {self.nextcourse}\n").upper()
self._clear()
for node in self.elements:
if (self.read_lk1(node) == self.lk1 and
self.read_lk2(node) == self.lk2 and
self.read_pf3(node) == self.pf3 and
self.read_pf4(node) == self.pf4):
self._printem(node)
# wait for enter to prevent closing on windows
input()
temp = [elli for elli in found if matches(elli, courses)]
found.clear()
found = [ele for ele in temp]
temp.clear()

for entry in found:
printem(entry)


def main():
"entry point"
query()
input()


if __name__ == "__main__":
k = Kurswaehler()
main()
114 changes: 74 additions & 40 deletions kurswahl_old.py
Original file line number Diff line number Diff line change
@@ -1,60 +1,89 @@
import os
from time import sleep

af1 = ["Deutsch", "Englisch", "Französisch", "Latein", "Spanisch", "Musik", "Bildende Kunst",
"Darstellendes Spiel"] #definition block
AF1_BOOL = False
af1 = [
"Deutsch",
"Englisch",
"Französisch",
"Latein",
"Spanisch",
"Musik",
"Bildende Kunst",
"Darstellendes Spiel",
] # definition block
af1_bool = False
af2 = ["Politikwissenschaften", "Geschichte", "Geographie", "Philosophie"]
AF2_BOOL = False
af2_bool = False
af3 = ["Mathematik", "Physik", "Chemie", "Biologie", "Informatik"]
AF3_BOOL = False
alles = ["Deutsch", "Englisch", "Französisch", "Latein", "Spanisch", "Musik", "Bildende Kunst",
"Darstellendes Spiel", "Politikwissenschaften", "Geschichte", "Geographie",
"Philosophie", "Mathematik", "Physik", "Chemie", "Biologie", "Informatik", "Sport"]
af3_bool = False
alles = [
"Deutsch",
"Englisch",
"Französisch",
"Latein",
"Spanisch",
"Musik",
"Bildende Kunst",
"Darstellendes Spiel",
"Politikwissenschaften",
"Geschichte",
"Geographie",
"Philosophie",
"Mathematik",
"Physik",
"Chemie",
"Biologie",
"Informatik",
"Sport",
]


def in_feld(fach: str):
"""Überprüft, ob <fach> Element der Listen <af1>, <af2>, <af3> ist und setzt ggf. den zugehörigen Bool auf True."""
"""Überprüft, ob <fach> Element der Listen <af1>, <af2>. <af3> ist und setzt ggf. den zugehörigen Bool auf True."""
if fach in af1:
global AF1_BOOL
AF1_BOOL = True
global af1_bool
af1_bool = True
if fach in af2:
global AF2_BOOL
AF2_BOOL = True
global af2_bool
af2_bool = True
if fach in af3:
global AF3_BOOL
AF3_BOOL = True
global af3_bool
af3_bool = True


def feld_fehlt():
"""Überprüft,ob die Booleans der AFs True sind, und gibt ggf. den Hinweis darauf aus."""
if not AF1_BOOL:
if not af1_bool:
print("\nEs fehlt noch ein Fach für Aufgabenfeld 1.")
if not AF2_BOOL:
if not af2_bool:
print("\nEs fehlt noch ein Fach für Aufgabenfeld 2.")
if not AF3_BOOL:
if not af3_bool:
print("\nEs fehlt noch ein Fach für Aufgabenfeld 3.")

def kurspruefer():

def kursprüfer():
"""Überprüft, ob Fachkombinationen möglich sind, oder gibt Hinweise was fehlt"""
lks = ["Englisch", "Französisch", "Spanisch", "Mathematik", "Physik", "Chemie", "Biologie",
"Deutsch"]
lks = ["Englisch", "Französisch", "Spanisch", "Mathematik", "Physik", "Chemie", "Biologie", "Deutsch"]
pfs = ["Englisch", "Französisch", "Spanisch", "Mathematik", "Deutsch"]
pfs_c = 0
vorraussetzungen_erfuellt = False
vorraussetzungen_erfüllt = False

os.system('cls||clear')
print("""
os.system("cls||clear")
print(
"""
Bitte beachten!
Sie müssen jedes Aufgabenfeld mindestens einmal in Ihren Prüfungsfächern wählen.
Ihre Prüfungsfächer müssen mindestens zwei der folgenden Fächer beinhalten: Deutsch, Mathematik, Fremdsprachen.
Ihr Referenzfach für die fünfte Prüfungskomponente darf nicht bereits Prüfungsfach sein, wenn Sie eine Präsentationsprüfung anstreben.
Sollten Sie eine besondere Lernleistung erbringen wollen, können Sie jedes Fach wählen, auch wenn es dieses Programm nicht anzeigt.
Gegebenenfalls können Sie bei falschen Kombinationen die Leistungskurse vertauschen, um eine gültige Kombination zu erhalten.
Je nach Prüfungsfach können weitere Pflichtfächer anfallen; diese entnehmen Sie bitte der Präsentation.
""")
"""
)

while not vorraussetzungen_erfuellt:
while not vorraussetzungen_erfüllt:

while True: #get 1. Leistungskurs
while True: # get 1. Leistungskurs
lk1 = input(f"\nWählen Sie ein Fach als ersten Leistungskurs: {lks}\n")

try:
Expand All @@ -68,7 +97,7 @@ def kurspruefer():
in_feld(lk1)
feld_fehlt()

while True: #get 1. Leistungskurs
while True: # get 1. Leistungskurs
lk2 = input(f"\nWählen Sie ein Fach als zweiten Leistungskurs: {lks + af2}\n")
try:
alles.remove(lk2)
Expand All @@ -80,7 +109,7 @@ def kurspruefer():
in_feld(lk2)
feld_fehlt()

while True: #get 3. PF
while True: # get 3. PF
pf3 = input(f"\nWählen Sie das dritte Prüfungsfach: {alles}\n")
try:
alles.remove(pf3)
Expand All @@ -92,7 +121,7 @@ def kurspruefer():
in_feld(pf3)
feld_fehlt()

while True: #get 4. PF
while True: # get 4. PF
pf4 = input(f"\nWählen Sie das vierte Prüfungsfach: {alles}\n")
try:
alles.remove(pf4)
Expand All @@ -104,8 +133,10 @@ def kurspruefer():
in_feld(pf4)
feld_fehlt()

while True: #get 5. PK
pk5 = input(f"\nWählen Sie das Referenzfach ihrer fünften Prüfungskomponente für Präsentationsprüfungen: {alles}\n")
while True: # get 5. PK
pk5 = input(
f"\nWählen Sie das Referenzfach ihrer fünften Prüfungskomponente für Präsentationsprüfungen: {alles}\n"
)
try:
alles.remove(pk5)
break
Expand All @@ -115,21 +146,24 @@ def kurspruefer():

in_feld(pk5)

for element in [lk1, lk2, pf3, pf4, pk5]: #logic block Prüfungsfächer erfüllt
if element in pfs:
for e in [lk1, lk2, pf3, pf4, pk5]: # logic block Prüfungsfächer erfüllt
if e in pfs:
pfs_c += 1

if ([AF1_BOOL, AF2_BOOL, AF3_BOOL] == [True, True, True]
and pfs_c >= 2 and pk5 not in [lk1, lk2, pf3, pf4]): #logic block Vorraussetzungen
vorraussetzungen_erfuellt = True
print(f"\nSie haben {lk1, lk2, pf3, pf4, pk5} gewählt. Bitte beachten Sie die weiteren Pflichtkurse für Ihre Fächerwahl.")
if (
[af1_bool, af2_bool, af3_bool] == [True, True, True] and pfs_c >= 2 and pk5 not in [lk1, lk2, pf3, pf4]
): # logic block Vorraussetzungen
vorraussetzungen_erfüllt = True
print(
f"\nSie haben {lk1, lk2, pf3, pf4, pk5} gewählt. Bitte beachten Sie die weiteren Pflichtkurse für Ihre Fächerwahl."
)
else:
print("Ihre Kurskombination entsprach nicht den Vorgaben!\nBeende!")
sleep(1)
os.system('cls||clear')
os.system("cls||clear")
sleep(1)
exit()


if __name__ == "__main__":
kurspruefer()
kursprüfer()

0 comments on commit ba88be1

Please sign in to comment.