Partnervermittlung Projekt

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Benutzeravatar
sorgenlos
User
Beiträge: 69
Registriert: Donnerstag 15. Februar 2007, 00:52

Partnervermittlung Projekt

Beitragvon sorgenlos » Sonntag 16. Dezember 2007, 22:46

Hallo Leute ich arbeite an einer Partnervermittlungssoftware mit GUI (Tkinter)
Zuletzt geändert von sorgenlos am Dienstag 18. Dezember 2007, 15:23, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Sonntag 16. Dezember 2007, 23:07

Hallo,

sich durch diesen komplexen Code zu wühlen, hat wohl kaum jemand Lust ;)

Daher erneut meine Frage / Hinweis: Was tut die Methode in Zeile 661??? Ich habe gesehen, dass sie keinen Wert zurückliefert, ok. Also wird ein übergebener Wert manipuliert? Was soll sie bewirken! Darüber solltest Du uns mal aufklären, dann können wir dir evtl. helfen.

Ciao,
Hyperion
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Beitragvon nkoehring » Montag 17. Dezember 2007, 04:46

du traegst deinen Nick nicht zu unrecht, Sorgenlos :roll:
BlackJack

Beitragvon BlackJack » Montag 17. Dezember 2007, 09:46

Ist eine harte Empfehlung aber IMHO sollte man die Anwendung wegwerfen und neu anfangen. Da liegt sowiel im Argen das sich eine inkrementelle Verbesserung nicht lohnt.

Neben Kleinigkeiten wie nicht Style Guide-konforme Namensgebungen, zu langen Zeilen, zu wenigen Leerzeichen, usw., die das Lesen und Verstehen des Programms erschweren, gibt es fragwürdige und schlicht falsche Entwurfsentscheidungen und der Quelltext ist viel zu lang, komplex, und unverständlich.

Den "place"-Layoutmanager von Tk zu benutzen ist keine gute Idee wie folgender Screenshot zeigt: http://bayimg.com/kAIaKAabe

Layoutmanager sollen dafür sorgen, dass eine GUI unter verschiedenen Bildschirmauflösungen, Schriftgrössen und auch Inhalten der GUI "passt". Das unterläuft man mit dem "exakten" Platzieren per Hand völlig. Die GUI wird starr und aufwendig anzupassen. Insbesondere wenn man sie in einem riesigen Codeblock erstellt und nicht in Unterbereiche aufteilt.

Besonders benutzerfreundlich scheint mir die GUI auch nicht. Das man sich bei "Hobby" zum Beispiel mit den Pfeilbuttons durchklicken muss, ohne dass man weiss was es alles gibt, ist nicht so toll. Ausserdem scheinen alle diese Felder mit den Pfeilbuttons als letzte Alternative einen leeren Eintrag zu haben. Ist das gewollt?

Dann ist das Implementieren einer doppelt verketteten Liste vielleicht eine nette Übung aber nichts was man ohne einen wirklich wichtigen Grund in einem Programm einsetzt. Listen gibt es schon als eingebauten Datentyp, die braucht man nicht langsamer und umständlicher neu erfinden. Die ganzen trivialen `hole*()`- und `setze*()`-Methoden sind überflüssig. Die `Knoten`-Klasse könnte ganz einfach so aussehen:

Code: Alles auswählen

class Knoten:
    def __init__(self, data):
        self.data = data
        self.nachfolger = None
        self.vorgaenger = None


In der Liste werden oft 0 und 1 als Rückgabewerte für Wahrheitswerte verwendet. Abgesehen davon, dass es `True` und `False` gibt, sollten an den meisten Stellen besser Ausnahmen verwendet werden um, nun ja, Ausnahmesituationen zu signalisieren. Das gilt z.B. auch für `Liste.holeElement()` ─ mit `None` als "speziellem" Rückgabewert kann man nicht unterscheiden ob man `None` zurück bekommt, weil es keinen Knoten gibt, oder ob es einen Knoten gibt, in dem ein `None` gespeichert ist.

Warum wird die Anzahl der Datensätze in den Dateien gespeichert? Das macht das Speichern und Laden nur komplizierter als es sein müsste. Und mit einer ``while``-Schleife "manuell" rückwärts zählen ist nicht besonders idiomatisch wenn man eine bestimmte Anzahl von Wiederholungen haben möchte.

Bei ``except`` sollte immer eine konkrete Ausnahme behandelt werden. Wenn man einfach alle behandelt, kann man Ausnahmen "verschlucken", mit denen man nicht gerechnet hat, und die man besser *sehen* sollte um Fehlern auf die Spur zu kommen.

Die `partnersuche` hat in einer generischen Liste nichts verloren. Und die Methode ist viel zu komplex. Falls das die ist, um die es in der Frage geht: Ich sehe da nirgends ein ``return``. Was sollen die ``else: None``-Zweige?

Einen Entwurfsfehler gibt's bei `Partnerprofil`. Entweder man entscheidet sich für Vererbung oder Komposition, aber von `Personalien`, `Kontaktprofil`, und `Wunschprofil` zu erben *und* jeweils eine Instanz dieser Klassen als Attribut speichern ist etwas zu viel des Guten. Auch hier gibt's in den genannten Klassen wieder die überflüssigen, trivialen `hole*()`- und `setze*()`-Methoden.

`string.split()` sollte nicht mehr verwendet werden. Das gilt für alle Funktionen aus dem `string`-Modul, die auch als Methoden auf Zeichenketten verfügbar sind.

Die Felder der Datensätze mit '#' zu trennen und einen Datensatz auf mehrere Zeilen aufzuteilen ist fehleranfällig und kompliziert. Pro Zeile ein Datensatz vereinfacht das Programm und wenn man dann noch das `csv`-Modul verwendet, braucht man auch keine Angst zu haben wenn der Benutzer des Programms das Trennzeichen irgendwo eingibt.

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]