Created
January 9, 2013 11:53
-
-
Save horstjens/4492585 to your computer and use it in GitHub Desktop.
Algo Dat Übung 6 "Organigramm" python3 code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Struktur der Firma: { Name: ( Name erster Unterling, Name nächster Kollege), .. } | |
# oder: [ (Name, Name erster Unterling, Namer nächster Kollege), .. ] | |
firma = { "A":("B","-"), "B":("-","C"), "C":("E","D"), "D":("G","-"), | |
"E":("-","F"), "F":("-","-"), "G":("-","-") } | |
# Problem in 2 Teilprobleme zerlegen. 1.) wie viele direkte Untergebene | |
# hat Mitarbeiter m ? | |
def mitarbeiterzaehler(m): | |
"""gibt die Anzahl der direkten Untergebenen eines Mitarbeiters zurück | |
(waagrechte suche, Breitensuche)""" | |
direkteuntergebene = 0 | |
unterling = firma[m][0] # zugriff auf ersten value im dictionary | |
if unterling == "-": | |
return 0 | |
kollege = firma[unterling][1] # zugriff auf kollegen vom ersten unterling | |
while True: | |
direkteuntergebene += 1 | |
if kollege == "-": | |
return direkteuntergebene # letzter Kollege | |
kollege = firma[kollege][1] | |
# alle Mitarbeiter auflisten die WENIGER als num direkte untergebene haben | |
# durch alle Mitarbeiter von m ausgehend durchlaufen: | |
result = [] | |
def subordinates(m, num): | |
"""geht per rekursion durch alle Mitarbeiter von und unter m durch | |
(Präorder - Suche in die Tiefe mit)""" | |
global result | |
print("Mitarbeiter: {}".format(m)) | |
if mitarbeiterzaehler(m) < num: | |
result.append(m) | |
unterling = firma[m][0] # zugriff auf ersten value im dictionary | |
kollege = firma[m][1] # zugriff auf zweiten value im dictionary | |
if unterling != "-": | |
subordinates(unterling, num) | |
if kollege != "-": | |
subordinates(kollege, num) | |
print("Firma:",firma) | |
#test der mitarbeiterzeahlerfunktion: | |
print("Name, Anzahl direkter Untergebener") | |
for k in firma: | |
print( k, mitarbeiterzaehler(k)) | |
for x in range(4,0,-1): | |
result = [] | |
print("weniger als {} direkte untergebene haben".format(x)) | |
print(subordinates("A",x)) | |
print("Result: ", result) | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Firma: {'A': ('B', '-'), 'C': ('E', 'D'), 'B': ('-', 'C'), 'E': ('-', 'F'), 'D': ('G', '-'), 'G': ('-', '-'), 'F': ('-', '-')} | |
Name, Anzahl direkter Untergebener | |
A 3 | |
C 2 | |
B 0 | |
E 0 | |
D 1 | |
G 0 | |
F 0 | |
weniger als 4 direkte untergebene haben | |
Mitarbeiter: A | |
Mitarbeiter: B | |
Mitarbeiter: C | |
Mitarbeiter: E | |
Mitarbeiter: F | |
Mitarbeiter: D | |
Mitarbeiter: G | |
None | |
Result: ['A', 'B', 'C', 'E', 'F', 'D', 'G'] | |
weniger als 3 direkte untergebene haben | |
Mitarbeiter: A | |
Mitarbeiter: B | |
Mitarbeiter: C | |
Mitarbeiter: E | |
Mitarbeiter: F | |
Mitarbeiter: D | |
Mitarbeiter: G | |
None | |
Result: ['B', 'C', 'E', 'F', 'D', 'G'] | |
weniger als 2 direkte untergebene haben | |
Mitarbeiter: A | |
Mitarbeiter: B | |
Mitarbeiter: C | |
Mitarbeiter: E | |
Mitarbeiter: F | |
Mitarbeiter: D | |
Mitarbeiter: G | |
None | |
Result: ['B', 'E', 'F', 'D', 'G'] | |
weniger als 1 direkte untergebene haben | |
Mitarbeiter: A | |
Mitarbeiter: B | |
Mitarbeiter: C | |
Mitarbeiter: E | |
Mitarbeiter: F | |
Mitarbeiter: D | |
Mitarbeiter: G | |
None | |
Result: ['B', 'E', 'F', 'G'] | |
------------------ | |
(program exited with code: 0) | |
Press return to continue |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment