Kleiner Texteditor

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.
iso139
User
Beiträge: 2
Registriert: Sonntag 24. Januar 2010, 14:39

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
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".
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. :-)
fabi1511
User
Beiträge: 23
Registriert: Donnerstag 25. Juni 2009, 18:59

vieleicht solltest du dir mal das modul cmd aus der standartbibliothek anschauen.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Verwende:
Funktionen (mindestens) oder ein Klasse
Dictionaries

und für einen richtigen Editor wäre [mod]curses[/mod] was
the more they change the more they stay the same
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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".
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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.
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)?
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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.
the more they change the more they stay the same
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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.
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.
iso139
User
Beiträge: 2
Registriert: Sonntag 24. Januar 2010, 14:39

Erstmal Danke für die vielen Antworten.
Ich werde versuchen eine verbesserte Version zu erstellen und diese dann noch einmal posten.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
da.dom
User
Beiträge: 114
Registriert: Dienstag 10. Juni 2008, 14:42

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 :)
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

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.
fhoech
User
Beiträge: 143
Registriert: Montag 9. April 2007, 18:26

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.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

@Mods/Admin: Kann jemand diesen Thread mal endlich bitte in das Showcase oder Code-Snippets Forum verschieben?
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

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.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

... 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.
Antworten