Anfänger braucht Hilfe beim Weiterkommen in einem Projekt

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.
moreeze
User
Beiträge: 6
Registriert: Freitag 21. November 2008, 00:51

Anfänger braucht Hilfe beim Weiterkommen in einem Projekt

Beitragvon moreeze » Freitag 21. November 2008, 00:59

Hallo zusammen!
Ich bin neu hier im Forum und genauso neu in der Welt von Python.
Ich habe ein Projekt, welches ich mir vorgenommen habe, das ich gerne verwirklichen möchte:

Ich möchte ein Shellbasiertes Telefonbuchprogramm schreiben, das reicht mir erstmal völlig, später kann es dann evtl auf Tkinter "umsteigen".

Ich selbst beschäftige mich erst seit kurzem mit Python, deswegen entschuldigt bitte wenn ich Fragen stelle, die für euch selbstverständlich sind!

Ich würde jetzt hier einfach mal meinen Code vorstellen, wie er bis jetzt ist:

Los gehts mit einem Login, dann kann man über ein Menü verschiedene Punkte auswählen, von denen ich mir erhoffe, dass sie auch funktionieren.

Hier also mein Code:

Code: Alles auswählen

# -*- coding: cp1252 -*-
def telefonbuch():
    print "Willkommen zu Ihrem Telefonbuch."
    print "Bitte loggen Sie sich ein: "
    print "Username: "
    username = raw_input()
    if username == "test":
        print "Geben Sie nun bitte ihr Passwort ein: "
        passwort = raw_input()
        if passwort == "test":
            print "Willkommen" + " " + username + "!"
            print "Was möchten Sie als nächstes tun?"
            loop = 1
            choice = 0
            while loop == 1:
                print " "
                print "Telefonbuch: "
                print " "
                print "1) Neuen Eintrag erstellen"
                print "2) Einen Eintrag bearbeiten"
                print "3) Einen Eintrag löschen"
                print " "
                print "4) Telefonbuch einsehen"
                print "5) Bestimmten Eintrag einsehen"
                print " "
                print "6) Telefonbuch beenden"
                print " "
                choice = input("Bitte wählen Sie aus: ")
                print " "
                if choice == 1:
                    print "1"
                elif choice == 2:
                    print "2"
                elif choice == 3:
                    print "3"
                elif choice == 4:
                    print "4"
                elif choice == 5:
                    print "5"
                elif choice == 6:
                    loop = 0
                    print "Auf Wiedersehen" + " " + username + "!"
    else:
        print "Dieser Nutzername existiert nicht, bitte versuchen Sie es erneut!"
       


Die Ausgaben bei den Eingaben sind nur Platzhalter für die Funktionen, die kommen sollen. Hier weiß ich allerdings nicht weiter...
Wie kann ich Eingaben speichern zB in einer Textdatei oder einer Datenbank und diese gezielt auslesen und bearbeiten, ansehen und löschen?

Vllt hat ja jemand ein paar Tipps oder evtl ein paar Links zu dem Thema, damit würdet ihr mir sehr helfen!

Über Anregungen zu meinem Code bin ich natürlich auch sehr offen!

Lg Moreeze
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 21. November 2008, 01:09

Hallo Moreeze, willkommen im Forum,

Ich weiß nicht ob es nicht sinnvoller ist, wenn du dir stattdessen tel ansiehst.

In deinem Fall sehe ich allerdings eher dass Problem, dass du etwas zu wenig Planung gemacht hast und dein Programm eher, hmm, unstrukturiert hast. Du solltest dir mal Klassen ansehen, das wäre ein Paradebeispiel für deren Einsatz.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
moreeze
User
Beiträge: 6
Registriert: Freitag 21. November 2008, 00:51

Beitragvon moreeze » Freitag 21. November 2008, 01:15

Hi!

Danke für die Antwort!
Ich werde es mir anschauen, aber irgendwo möchte ich das auch selber machen. Gibt es gute Links zum Thema Klassen?
Wie sähe denn eine gute Strukturierung aus?

Gruß
Moreeze
abgdf

Beitragvon abgdf » Freitag 21. November 2008, 01:17

Versuch' doch auch zuerst, die Funktionalität in den Griff zu kriegen: Willkommensbildschirm, Passwortabfrage usw. können dann später dazukommen. Ist z.B. am Anfang so einfacher zu testen ...

Gruß
moreeze
User
Beiträge: 6
Registriert: Freitag 21. November 2008, 00:51

Beitragvon moreeze » Freitag 21. November 2008, 01:24

Also so wie ich das jetzt verstanden habe müsste ich eine Klasse pro Funktion erstellen und diese dann verbinden...
So ganz verstanden wie ich diese definiere hab ich noch nicht...hat jemand einen guten Link dazu?

Stimmt, den ganzen Quatsch am Anfang mach ich weg :D
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 21. November 2008, 01:39

moreeze hat geschrieben:Also so wie ich das jetzt verstanden habe müsste ich eine Klasse pro Funktion erstellen und diese dann verbinden...

Nein. Eine Klasse wäre etwas real existierendes. Also etwa ein Telefonbucheintrag. Guck doch mal, wie tel das mit den Klassen macht - auch wenn du vielleicht mit dem restlichen Code noch nicht so viel anfangen kannst - die Klassenstruktur wird wohl in Ordnung sein.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
bremer
User
Beiträge: 109
Registriert: Sonntag 25. Mai 2008, 00:13

Beitragvon bremer » Freitag 21. November 2008, 05:30

Bezüglich Datenspeicherung: http://www.python-forum.de/topic-6157.html
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Freitag 21. November 2008, 11:07

Ich denke nicht, dass man sofort mit Klassen beginnen muss. OOP wird erfahrungsgemäß nie auf Anhieb auch nur ausreichend verstanden und bringt so zusätzliche Hürden für Anfänger mit, die dann in *richtig* verkorkstem Code enden.

Als jemand, für den Refactoring eine Art Kreuzzug ist (;))), empfehle ich, zunächst das Programm mit den einfachsten, bekannten Mitteln zum Laufen zu bringen. Das kann von mir aus auch alles imperativ sein.

Nach und nach eignet man sich dann weitere Techniken an (Schleifen, Funktionen, Klassen, Hilfsmodule aus der Standardbibliothek u.s.w.) und wendet diese dann auf den Code an. Erst dann wird - wenn richtig angewendet - deren Macht und Vorteil deutlich, da der Code deutlich mächtiger, kompakter, flexibler und wartbarer werden kann. Auch mag man dann leichter erkennen, was für ein Problem bzw. Umstände man bisher hatte und es wird leichter ersichtlich, dass z. B. eine Klasse diese(s) gut lösen kann.

Später, wenn man intensiv mit OOP gearbeitet hat, wird man von selbst daran gehen, zumindest einen guten Teil von Beginn an in Klassen zu modellieren - sofern die Anforderungen dann entsprechend bekannt sind.
BlackJack

Beitragvon BlackJack » Freitag 21. November 2008, 11:26

Ich denke man sollte recht früh mit Klassen als Verbund von (Daten)Attributen beginnen, also noch kein OOP, sondern als Gegenstück zu `struct` in C oder `RECORD` in Pascal. Ansonsten werden Programme schnell unübersichtlich und schwer zu durchschauen, wenn man immer tiefer verschachtelte Tupel, Listen, und Dictionaries verwendet und mit Indexen statt mit aussagekräftigen Namen hantiert.

Nachtrag: Vielleicht ist dieser Text eventuell interessant: http://www.marc.rintsch.de/simpledb/simpledb.html

Der ist letztes Jahr mal zu einer ähnlichen Diskussion entstanden (DB für Anfänger ohne Klassen) und ich suchte einen Grund `pylit` mal aus zu probieren. :-)
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Freitag 21. November 2008, 14:52

Nunja, die essentiellen Datentypen Liste und Mapping/Hash/`dict` sollte man kennen. Von da an ist's dann zu einer Klasse nicht mehr weit - aber das kann man dann ja jemandem vorschlagen, der mit vierdimensionalen dicts und potentiell als Methoden tauglichen Funktionen hier nach Hilfe fragt ;)

Andernfalls kann es sein, dass Klassen - vermutlich insbesondere von PHP-Geschädigten - einfach als Namespace angesehen und missbraucht werden.

Das Ganze getreu dem Motto: Manche Probleme muss man erstmal haben, bevor man die Lösungsansätze dafür versteht.
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Beitragvon roschi » Freitag 21. November 2008, 20:17

hallo!

ich werde dem naechst - sobald ich zeit dazu habe - mal ein kleines beispiel-telefonbuch posten und hoffen, dass es etwas weiterhilft.

lg
roschi

[edit]
@moreeze:
hast du eigendlich schonmal das hier durchgearbeitet?
oder, hierauch in deutsch
[/edit]
Zuletzt geändert von roschi am Freitag 21. November 2008, 21:13, insgesamt 2-mal geändert.
Fuer Alle, die in Python einsteigen wollen, kann ich das Buch A Byte of Python nur waermstens empfehlen!
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Beitragvon veers » Freitag 21. November 2008, 20:20

Leonidas hat geschrieben:
moreeze hat geschrieben:Also so wie ich das jetzt verstanden habe müsste ich eine Klasse pro Funktion erstellen und diese dann verbinden...

Nein. Eine Klasse wäre etwas real existierendes. Also etwa ein Telefonbucheintrag.
Sag das mal den Java Leuten.
My Website - 29a.ch
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 22. November 2008, 02:03

veers hat geschrieben:
Leonidas hat geschrieben:
moreeze hat geschrieben:Also so wie ich das jetzt verstanden habe müsste ich eine Klasse pro Funktion erstellen und diese dann verbinden...

Nein. Eine Klasse wäre etwas real existierendes. Also etwa ein Telefonbucheintrag.
Sag das mal den Java Leuten.

Natürlich. Java biegt es wieder in die andere Richtung um, so dass es eher im Weg steht als dass es hilft. "Zu viel ist ungesund" gilt auch für OOP. Es ist nicht ganz einfach den richtigen Mittelweg zu finden. Tendentiell würde ich aber sagen, dass zu viele Funktionen weniger schaden als zu viel OOP. Das ist auch eine dieser Sachen, die ich in Java eher ungelungen finde.

Und hey, die Java-Leute können ja auf Scala wechseln, dann hätten sie wenigstens Type Inference (die Auflistung der Programmiersprachen im ersten Absatz listet so ziemlich die statisch typisierten Sprachen ab, die einigermaßen brauchbar sind. Java ist nicht dabei, C# schon) ;) Ohh Sun, mach dass es besser wird!
My god, it's full of CARs! | Leonidasvoice vs Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Samstag 22. November 2008, 12:00

Javas Problem ist IMHO, dass es nicht objektorientiert genug ist. Daher schmerzt jeder Übergang von primitiven Datentypen zu Objekten oder jeder Gebrauch von statischen Funktionen. Scala ist da besser. JavaScript oder natürlich Smalltalk oder Self ebenfalls.

Nachteil der geforderten Typinferenz sind z.B. "unbegreifliche" Fehlermeldungen und die Notwendigkeit für ein deutlich mächtiges Typsystem als es Java zur Zeit hat, was wiederum zu "unbegreiflichen" Methodendefinitionen mit Co- und Contavarianzdeklarationen führt.

Cecil ist übrigens ein typisiertes Self mit einer Prise CommonLisp. Sprachbeschreibung hat so 100 Seiten oder so, 20 beschreiben die Sprache, der Rest ist das Typsystem.

Gibt es eigentlich Versuche, Python-Code statisch zu typisieren?

Stefan
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Samstag 22. November 2008, 12:23

Jap, RPython.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]