Seite 1 von 2

Kleiner Texteditor

Verfasst: Sonntag 24. Januar 2010, 14:48
von iso139
Hallo Python-forum!
Ich bin 14 Jahre alt und arbeite an meinem ersten kleinen Programmierprojekt in Python 3.1.

Ich möchte einen kleinen Texteditor für Linux entwickeln.
Ich wollt euch meinen Code vorstellen und fragen was ihr dazu meint.

Code: Alles auswählen

# Einfacher Texteditor
# Geschrieben in Python 3.1

# GPL 2

print("LG EDITOR V 0.4")
print()
e = 0
name = None
print() 

# Variable name ist der Pfad der zu bearbeitenden Datei, wird auf None gesetzt.

while True:
    print()
    e = 0
    command = input("Befehl: ")            # Einfache Eingabeaufforderung

# Es folgen die Befehle zur Bearbeitung. "e = 1" dient zur Kontrolle auf eine
# falsche Eingabe.

    if command == "edit":
        e = 1
        print("Befehl noch in Entwicklung")
        pass

    if command == "open":
        e = 1
        name = input("Dateipfad: ")
        file = open(name, "a+")
        file.close()
    
    if command == "close":
        e = 1
        if name == None:
            print("Keine Datei geöffnet!")
            continue
        name = None

    if command == "cat":
        if name == None:
            print("Keine Datei geöffnet!")
            continue
        file = open(name, "r")
        e = 1
        inhalt = file.read()
        print("###ANFANG###")
        print(inhalt)
        print("###ENDE###")
        file.close()

    if command == "add":
        if name == None:
            print("Keine Datei geöffnet!")
            continue
        file = open(name, "a+")
        e = 1
        while True:
            text = str(input("Eingabe: "))
            if text == "/stop":
                break
            file.write(text + "\n")
        file.close()

    if command == "ver":
        e = 1
        print("LG EDITOR V 0.3")
        
    if command == "clearfile":
        if name == None:
            print("Keine Datei geöffnet!")
            continue
        e = 1
        ask = input("Wollen Sie die Datei wirklich Leeren? [y;n] ")
        if ask == "y":
            file = open(name, "w")
            file.close()
        if ask != "y":
            if ask != "n":
                print("Falsche Eingabe!")

    if command == "quit":
        
        e = 1
        x = input("Wollen Sie wirklich beenden? [y;n] ")
        if x == "y":
            quit()
        if x != "y":
            if x != "n":
                print("Falsche Eingabe!")

    if command == "help":
        e = 1
        print()
        print("add - Fügt der Datei einen Text hinzu. (Ende mit /stop)")
        print("quit - Beendet den Editor.")
        print("cat - Gibt die Datei aus.")
        print("clearfile - Löscht den Inhalt der Datei.")
        print("ver - zeigt die Programmversion an.")
        print("open - öffnet eine Datei.")
        print("close - schließt die Datei.")
        print()

# Ende der Befehle

    if e == 0:
        print("Syntax Error!")
# Ueberbruefung auf falsche Eingabe
PS: Auch wenn ich 14 bin, bin ich ein richtiger Geek, also biete mit mir wie mit einem adulten Forenmitglied sprechen. :D

Verfasst: Sonntag 24. Januar 2010, 14:55
von lunar
Mies (nichts für ungut).

- Dateien öffnet man mit einer "with"-Anweisung, damit sie immer sicher geschlossen werden. Bei Deinem Quelltext ist das nicht der Fall.
- Die riesige "if"-Kaskade ist an Unübersichtlichkeit kaum zu überbieten. Lagere die einzelnen Kommandos in separate Funktionen aus, und nutze ein Wörterbuch, welches Kommandos auf entsprechende Funktionen abbildet.
- "e" ist ein unterirdisch schlechter Name.
- Lagere häufige benutzte Dinge in eigene Funktionen aus (e.g. die Ja/Nein-Abfrage).
- Gegen None prüft man mit "is".

Verfasst: Sonntag 24. Januar 2010, 15:55
von BlackJack
@iso139: Der Quelltext enthält ein hübsches Beispiel warum man vermeiden sollte Informationen oder Code an verschiedenen Stellen zu wiederholen, oder etwas knapper formuliert das DRY-Prinzip -- Don't Repeat Yourself. Ist das nun Version 0.4 oder 0.3 von dem Editor? Diese Information gilt für das ganze Programm, sollte deshalb nur einmal im Quelltext stehen.

Für so etwas kommandozeilebasiertes solltest Du mal einen Blick in das `cmd`-Modul in der Standardbibliothek werfen. Man muss das Rad nicht immer neu erfinden. :-)

Verfasst: Sonntag 24. Januar 2010, 16:13
von fabi1511
vieleicht solltest du dir mal das modul cmd aus der standartbibliothek anschauen.

Verfasst: Sonntag 24. Januar 2010, 16:23
von Dav1d
Verwende:
Funktionen (mindestens) oder ein Klasse
Dictionaries

und für einen richtigen Editor wäre [mod]curses[/mod] was

Verfasst: Sonntag 24. Januar 2010, 16:27
von numerix
lunar hat geschrieben:- Dateien öffnet man mit einer "with"-Anweisung, damit sie immer sicher geschlossen werden.
Ich finde den Verzicht auf die "with"-Kontruktion nicht schlimm. Mittlerweile ist es fast schon zum Automatismus geworden: Wann immer irgendein Quelltext gezeigt wird, in dem Dateien geöffnet (und geschlossen) werden ohne "with", bekommt man das unter die Nase gerieben. Das mag aus der Sicht derer, die umfangreichere Anwendungen schreiben und die selbst schon erlebt haben, dass sie sich durch das vergessene Schließen von Dateien Probleme eingehandelt haben und froh sind, dass es "with" gibt, korrekt sein.

Aber für einen Anfänger ist die "with"-Kontruktion weniger eingängig als der klassische Dreischritt "Öffnen - Schreiben/Lesen - Schließen".

Verfasst: Sonntag 24. Januar 2010, 16:32
von derdon
Soll ein Anfänger denn ein Anfänger bleiben? So habe ich das nie gesehen, erst recht nicht, als ich mit Programmierung allgemein anfing. Ich hatte schon immer das Bedürfnis, eine Programmiersprache richtig und nicht nur oberflächlich verstehen zu können. Neue Funktionen und Techniken will und wollte ich dazulernen, um nicht für immer bei dem gleichen Wissensstand zu bleiben.

Verfasst: Sonntag 24. Januar 2010, 16:42
von problembär
Das Thema "einfacher Texteditor in Python" taucht ja immer mal wieder auf. Wäre es nicht eigentlich ganz schön, wenn die versammelten Cracks hier dazu mal eine endgültige Version (in wxPython und/oder Tkinter) abliefern würden (... anstatt immer nur andere zu kritisieren)?

Verfasst: Sonntag 24. Januar 2010, 16:52
von Dav1d
Ein Editor mit wxPython ist keine Kunst

wieso kritisieren, ich würde es verbessern nennen
iso139 hat geschrieben:Ich wollt euch meinen Code vorstellen und fragen was ihr dazu meint.

Verfasst: Sonntag 24. Januar 2010, 17:00
von derdon
problembär hat geschrieben:Wäre es nicht eigentlich ganz schön, wenn die versammelten Cracks hier dazu mal eine endgültige Version (in wxPython und/oder Tkinter) abliefern würden (... anstatt immer nur andere zu kritisieren)?
Ich bin kein Crack. Und selbst wenn ich einer wär, würde ich nicht den einemillion-milliardsten Editor schreiben; es gibt einfach genug.

Verfasst: Sonntag 24. Januar 2010, 17:24
von numerix
derdon hat geschrieben:Soll ein Anfänger denn ein Anfänger bleiben?
Über die Antwort sind wir uns einig.
Aber das Öffnen, Lesen/Schreiben und anschließende Schließen einer Datei ist doch kein schlechter Stil. In dem Post von lunar finden sich ja noch einige andere Punkte, auf die berechtigtermaßen hingewiesen wurde: Daran sollte der OP in der Tat arbeiten, da geht es z.T. um Grundlegendes.

Verfasst: Sonntag 24. Januar 2010, 17:33
von lunar
numerix hat geschrieben:Aber das Öffnen, Lesen/Schreiben und anschließende Schließen einer Datei ist doch kein schlechter Stil.
Ohne "with" schon. "with" ist der einzige Weg [*] zum sicheren Umgang mit Ressourcen, man sollte sich das so früh als möglich angewöhnen. Die Einsicht in die Tatsache, dass Speicherfreigabe in Python nicht-deterministisch ist, und dass dementsprechend sorgfältig mit Ressourcen umgegangen werden muss, ist nicht minder grundsätzlich als der Rest meines Beitrags.

@problembär: Ich brauche keinen x-ten Texteditor, weder für mein Ego noch zur Übung.

[*] try-catch-finally zählt nicht, siehe Zen.

Verfasst: Sonntag 24. Januar 2010, 18:38
von iso139
Erstmal Danke für die vielen Antworten.
Ich werde versuchen eine verbesserte Version zu erstellen und diese dann noch einmal posten.

Verfasst: Sonntag 24. Januar 2010, 20:42
von CM
iso139 hat geschrieben:... noch einmal posten.
Hierzu am besten ein pastbin (z.B. http://paste.pocoo.org/) nehmen, sonst ist die Forumssoftware schnell überfordert.

Gruß,
Christian

Verfasst: Montag 25. Januar 2010, 09:47
von da.dom
derdon hat geschrieben: würde ich nicht den einemillion-milliardsten Editor schreiben; es gibt einfach genug.
Schreibst du immer nur Programme die die Welt noch nicht gesehen hat :) ? Gerade wenn ich eine Programmiersprache lerne, schreibe ich doch gezielt so viele Programme wie möglich, und (so geht es mir zumindest) spielt der Lerneffekt bei der Programmierung eine weit größere Rolle als der endgültige Nutzen.

Grüße
D


PS:
numerix hat geschrieben: Aber für einen Anfänger ist die "with"-Kontruktion weniger eingängig als der klassische Dreischritt "Öffnen - Schreiben/Lesen - Schließen".
Sehe ich genauso. Ich muss ja zugeben das ich mich auch erst vor kurzen in das "with" Statement "eingelesen" habe. Ist eine nette Sache keine Frage, aber anstatt ein klassisches Öffnen, Bearbeiten, Schließen einer Datei mit "Mist" zu übertiteln, würde ein freundlicher Hinweis darauf was das "with" Statement ist und wie man es anwendet als Alternative, völlig ausreichen :)

Verfasst: Montag 25. Januar 2010, 10:07
von Panke
da.dom hat geschrieben: Sehe ich genauso. Ich muss ja zugeben das ich mich auch erst vor kurzen in das "with" Statement "eingelesen" habe. Ist eine nette Sache keine Frage, aber anstatt ein klassisches Öffnen, Bearbeiten, Schließen einer Datei mit "Mist" zu übertiteln, würde ein freundlicher Hinweis darauf was das "with" Statement ist und wie man es anwendet als Alternative, völlig ausreichen :)
Das Problem ist ja, dass es in diesem Fall nicht ausreicht, die Datei zu öffnen und auch zu schließen. Stichwort Ausnahmen. Also entweder den Anfänger auf try,catch,finally Hinweisen oder auf die with-Anweisung.
Öffne die Dateien mit with, dann sind sie am Ende des Blockes garantiert zu.
Ist doch die einfachste, für Anfänger ausreichende Erklärung? Das with-Protokoll ist an der Stelle ja vollkommen uninteressant.

Verfasst: Montag 25. Januar 2010, 10:24
von fhoech
Das Problem ist ja, dass es in diesem Fall nicht ausreicht, die Datei zu öffnen und auch zu schließen. Stichwort Ausnahmen. Also entweder den Anfänger auf try,catch,finally Hinweisen oder auf die with-Anweisung.
Das with-statement entbindet einen ja nicht völlig von der Ausnahmenbehandlung mit try...except. Was natürlich kein Argument gegen with sein soll.

Verfasst: Montag 25. Januar 2010, 10:54
von Masaru
@Mods/Admin: Kann jemand diesen Thread mal endlich bitte in das Showcase oder Code-Snippets Forum verschieben?

Verfasst: Montag 25. Januar 2010, 13:39
von jbs
Masaru hat geschrieben:@Mods/Admin: Kann jemand diesen Thread mal endlich bitte in das Showcase oder Code-Snippets Forum verschieben?
Wieso das denn?
Es geht doch dem OP nicht darum seinen Texteditor als solchen vorzustellen, sondern Anregungen zu seinem Code/Programmierstil zu bekommen.

Verfasst: Montag 25. Januar 2010, 14:09
von Masaru
... ach, dann wirf doch mal einen Blick ins Showcase oder Code-Snippets und sag mir mal, wozu ~94,3% aller dortigen Threads sich entwicklen oder direkt genutzt werden.