Adressbuch

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.
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Ok, bin erstmal einen Schritt zurückgegangen. Hier die neue Datei: https://github.com/toxinman/stuff/blob/ ... essbuch.py
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

@ Xfd7887a: was soll das eigentlich für eine ID sein? Wenn IDs nicht eindeutig sind, was ist dann der Sinn einer ID. Bei loeschen entfernst Du Elemente aus einer Liste, über die Du iterierst. Das führt zu unvorhergesehenem Verhalten. In Deinem Fall würde aber auch ein 'remove' auf der Liste reichen.
Suchen liefert jetzt eine Liste zurück, so dass aendern und loeschen nicht mehr funktioniert.
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Ja, weil ich nicht weiß, wo jetzt das Abfragen, welches Suchergebnis das richtige ist, erfolgen soll.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Der Sinn einer ID ist es zudem auch, dass man einen Datensatz anhand dieser leicht ermitteln kann. Insofern böte es sich an, die äußere Liste durch ein Dictionary zu ersetzen und darin die ID als Schlüssel und ein zugehöriges Adressen-Dict als Wert abzubilden. Damit kannst Du das ``loeschen`` über die ID erledigen und musst nicht mehr iterieren.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Ich habe mal weiter gearbeitet: https://github.com/toxinman/stuff/blob/ ... essbuch.py Sorry für die lange Pause :(
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Kann ich mich jetzt an die Gui machen :D oder muss ich noch etwas ändern?
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

@Xfd7887a: das mit dem Suchen ist ja immer noch nicht so toll. Aber was Du haben willst, mußt Du selbst wissen.
Da Du für GUI sowieso Klassen brauchst, kannst Du ja mal zur Übung Deine Addressen in eine Klasse verwandeln.
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Da Du für GUI sowieso Klassen brauchst, kannst Du ja mal zur Übung Deine Addressen in eine Klasse verwandeln.
Also muss ich alle Funktionen in eine Klasse stecken?

Edit: Das Auswählen des richtigen Suchergebnis müsste ja theoretisch mit der GUI gemacht werden.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Xfd7887a hat geschrieben: Also muss ich alle Funktionen in eine Klasse stecken?
Alle natürlich nicht - nur diejenigen, die sinnvoll für die (jeweilige) Klasse sind ;-) Die Frage ist halt nach wie vor, ob man bei dem bisherigen Entwurf tatsächlich Klassen braucht und wo man diese sinnvoller Weise einsetzen könnte.
Xfd7887a hat geschrieben: Edit: Das Auswählen des richtigen Suchergebnis müsste ja theoretisch mit der GUI gemacht werden.
Das kann und sollte auch *ohne* GUI funktionieren. Ich habe mir den aktuellen Stand zwar schon länger nicht mehr angeguckt, aber iirc sind da noch einige unschöne und störende Elemente in dem bisherigen Entwurf.

Wieso baust Du nicht erst einmal ein textuelles UI mit dem bisherigen auf? Also eines, in dem der Benutzer wirklich über einfache Menüs Aktionen rund um das Adressbuch nutzen kann? Imho wirst Du dann noch besser verstehen, was ein gutes API können muss.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Ok, das werde ich machen :D
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Muss ich dann alle Eingaben in extra Funktionen packen?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Xfd7887a hat geschrieben:Muss ich dann alle Eingaben in extra Funktionen packen?
Verstehe Deine Frage so nicht. Wie genau meinst Du das?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Wohin muss die Eingabe? Du sagtest ja, dass sie nicht in die jeweiligen Funktionen darf. Also müssen sie ja irgendwo anders hin :D Nur wohin? In extra Funktionen oder einfach in Main rein?
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Muss ich es in der Art machen:

Code: Alles auswählen

def neue_adresse_hinzufügen():
    name = input("Name: ")
    ...
    neue_erstellen(name, ...)

def main():
    neue_adresse_hinzufügen()
?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Um die Selbständigkeit zu verbessern: Was denkst Du denn? ;-) Versuche (letztlich auch Dir selber) zu erklären, wieso Du solch eine Funktion für sinnvoll hältst. Überlege Dir, ob und welche Alternativen Dir einfallen und überlege, was da Vor- und Nachteile sein könnten...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Xfd7887a
User
Beiträge: 135
Registriert: Montag 23. Juni 2014, 17:11

Ich würde so eine Funktion für sinnvoll halten, da sie später einfach durch die GUI ersetzt werden kann :D Oder nicht?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Die Begründung ist nicht wirklich stichhaltig - alles, was eine TUI und eine GUI *nicht* gemeinsam haben, sind per se voneinander unabhängig Dinge. Insofern kannst Du keine Sinnhaftigkeit für Deine TUI daraus schlussfolgern. Aber: Wichtig ist, *dass* Du Funktionen aus dem Kern Deiner Domäne nutzt, um ein TUI zu realisieren! Das legt schon mal nahe, dass man später diese Funktionen *auch* aus einer GUI nutzen kann (und sollte!). Für Deine Frage ist es aber wichtiger zu gucken, *wie* Dein TUI gegliedert sind soll und wie Du welche Operation aufrufst. Stellst Du dabei fest, dass Du immer wieder ähnlichen Code schreibst, um Benutzereingaben abzufragen, so musst Du dann prüfen, ob man solche Funktionalität auch in eine gemeinsame Funktion bündeln kann. Fürs erste sieht mir das hier aber ok aus.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten