Verständnisfrage bzgl. Aufgabenstellung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
bertrand
User
Beiträge: 2
Registriert: Donnerstag 12. Oktober 2017, 13:38

Hallo,

ich habe folgende Aufgabe zu bewältigen:

"Gegeben sei eine Liste von Nutzernamen passwd (Password-Datei, latin-1-kodiert), die einen Nutzer pro Zeile enthält und die Nutzer in der Form login_name:password:UID:GID:user_name:directory:shell
enthält. Entwickeln Sie ein Modul account.py, das die folgenden Typen und Funktionen enthält: ◦Account ist eine Datensatz-Klasse mit den Feldern login_name, password, UID, GID, user_name, directory und shell. Dabei sollen UID und GID ganze Zahlen sein, alle anderen Felder Byte-Strings.
◦read(dateiname) liest eine Passwort-Datei, und gibt eine Liste von Account-Datensätzen zurück, in der Reihenfolge, wie sie auch in der Datei stehen.
◦find_account(liste, login_name) durchmustert eine solche Liste und gibt den Datensatz mit dem angegebenen login_name zurück. Falls kein solcher Datensatz gefunden wurde, soll die Ausnahme KeyError ausgelöst werden."


Ich bin etwas verwirrt ob des Begriffes Account-Datensatz. Sind damit einfach die mittels der Klasse Account erstellten Objekte gemeint?

Vielen Dank!
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

bertrand hat geschrieben:Ich bin etwas verwirrt ob des Begriffes Account-Datensatz. Sind damit einfach die mittels der Klasse Account erstellten Objekte gemeint?
Das wäre ein möglicher Lösungsansatz. Dann hast Du zwar eine Klasse ohne Methoden, aber was solls'. Vielleicht habt ihr später ja noch weitere Aufgaben, die darauf hinauslaufen, Methoden hinzuzufügen. Wenn Du Dir unsicher bist, frage am besten einen Tutor, wie der Begriff zu interpretieren ist.
bertrand
User
Beiträge: 2
Registriert: Donnerstag 12. Oktober 2017, 13:38

kbr hat geschrieben: Wenn Du Dir unsicher bist, frage am besten einen Tutor, wie der Begriff zu interpretieren ist.
Hallo,
ja, das würd ich machen, ich studier allerdings nicht Informatik sondern versuche lediglich mir mithilfe von Uni-Aufgaben das Programmieren selbst beizubringen.
Danke für die Antwort aber nun frag ich mich, weshalb die Klasse keine Methoden hat, würden dort nicht die ganzen Getter-Methoden drin sein?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@bertrand: genau, `read` soll eine Liste mit Account-Instanzen zurückliefern.

Wobei man sich bei der Aufgabenstellung fragen muß, was eine Datensatz-Klasse ist, was der Aufgabensteller unter Felder versteht und warum, wenn die Datei latin-1-kodiert ist die Felder Byte-Strings sein sollen. Zudem ist nicht spezifiziert, was passieren soll, wenn die Datei nicht dem angegebenen Format entspricht. Also genug Freiheiten, um alles mögliche zu programmieren.


So ist die Aufgabe zwar nicht gemeint, aber am einfachsten wäre wohl `Account = dict` zu nehmen und mit csv.DictReader zu arbeiten.

Code: Alles auswählen

Account = dict

def read(filename):
    with open(filename) as input:
        return csv.DictReader(input, delimiter=':', fieldnames='login_name:password:UID:GID:user_name:directory:shell'.split(':'))

def find_account(liste, login_name):
    return {x['login_name']:x for x in liste}[login_name]
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@bertrand: wenn Du in Deiner Lösung frei bist, dann würde ich die Dictionaries mit den Account-Daten nicht in einer Liste speichern, sondern in einem Dictionary mit den login-namen als Keys.
Antworten