Python Konsolen-Menü

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.
Antworten
maverick7bm
User
Beiträge: 4
Registriert: Montag 15. Mai 2006, 14:59
Wohnort: Pulheim
Kontaktdaten:

Erstmal Hallo ;)

Bin ein Neuling in Python habe aber schon PHP-Kenntnisse und
Python und PHP ähneln sich schon ein bisschen.

Ich schreibe gerade aus Lernzwecken an einen kleinen Konsolen-Chat
Programm, welches ganz einfach den Text in eine Datei speichert und
ihn dort auch wieder ausliest.

Mein Problem:
Ich möchte das nach jedem Funktionsaufruf den Python ausführt (entweder
um den Text auszulesen oder ihn einzutragen) dem User wieder die Frage
stellen was er denn jetzt vornehmen will, sodass das Programm endlos
weiter läuft es sei denn er drückt die 3.

Code: Alles auswählen

import sys

#################[FUNCTIONS]###################

# Datei lesen
def readFile ():
    f = file('chatlog.log','r')
    while True:
            line = f.readline()
            if len(line)== 0:
                break
            print line,
    f.close()

# in Datei schreiben
def putFile (text):
    f = file('chatlog.log','a')
    f.write(text)
    f.close()

#################[FUNCTIONS]###################

###################[MAIN]######################
username = raw_input('Ihr Username: ')
#action = raw_input('1:lesen 2:schreiben 3:exit = ')

while action != '3':

    action = raw_input('1:lesen 2:schreiben 3:exit = ')
    
    if action == '1':
        print "\n"
        readFile()
        break
   
    if action == '2':
        print "\n"
        text = raw_input('Text: ')
        putFile(text)
        break
    
if action == '3':
        print "\n \n Goodbye ;)"
        sys.exit()

###################[MAIN]######################

Ich hab dies jetzt in einer while Schleife nur das dumme ist das break die
Schleife ja beendet und nicht wieder von vorne startet.

Außerdem habe ich noch ein kleines Problem (ich hab jetzt mal keinen zweiten Thread aufgemacht). Ich möchte das der username vor den Text
gesetzt wird und ein \n nach dem Text.

Damit es später etwa so aussieht:

Code: Alles auswählen

test:ich teste nur
test2:ich auch ;)
???:und was mach ich ?
Schonmal danke für eure Hilfe ;)
Der Kreis ist einge geometrische Figur wo an allen
Ecken und Kanten gespart wurde
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

maverick7bm hat geschrieben:Ich hab dies jetzt in einer while Schleife nur das dumme ist das break die
Schleife ja beendet und nicht wieder von vorne startet.

Code: Alles auswählen

continue
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
maverick7bm
User
Beiträge: 4
Registriert: Montag 15. Mai 2006, 14:59
Wohnort: Pulheim
Kontaktdaten:

Stimmt das gab es ja auch noch dankeschön. Wie konnte
ich nur so blöd sein :roll:

Das andere Problem habe ich jetzt auch gelöst ;)

Code: Alles auswählen

text2w = "\n"+username+": "+text+"\n"
Hätte mir auch früher einfallen können.
Der Kreis ist einge geometrische Figur wo an allen
Ecken und Kanten gespart wurde
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Zahllose Änderungen später:

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*- 

def read_file():
    """Datei lesen"""
    f = file('chatlog.log', 'r')
    for line in f:
        print line,
    f.close()

def put_file(text):
    """in Datei schreiben"""
    f = file('chatlog.log', 'a')
    f.write(text + '\n')
    f.close()

def main():
    username = raw_input('Ihr Username: ')
    action = raw_input('1:lesen 2:schreiben 3:exit = ')

    while action != '3':
   
        if action == '1':
            print "\n"
            read_file()
            action = raw_input('1:lesen 2:schreiben 3:exit = ')
            continue
        
        elif action == '2':
            print "\n"
            text = raw_input('Text: ')
            put_file(username + ':' + text)
            action = raw_input('1:lesen 2:schreiben 3:exit = ')
            continue
        
        elif action == '3':
            print "\n \n Goodbye ;)"
            return

if __name__ == '__main__':
    main()
Mal gucken:
  1. Shebang eingefügt
  2. Encoding eingefügt
  3. PEP 8 'Coding Style' angepasst
  4. Seltsame Kommentare mit Mustern entfernt
  5. main() Funktion erstellt
  6. Import-Hook gesetzt
  7. read_file() drastisch gekürzt
  8. put_file um ein '\n' ergänzt
  9. in main() aus if's elifs gemacht
  10. sys.exit durch return ersetzt, wenn das Skript zu Ende geht wird es automatisch beendet
  11. Usernamen-Handling eingesetzt
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
maverick7bm
User
Beiträge: 4
Registriert: Montag 15. Mai 2006, 14:59
Wohnort: Pulheim
Kontaktdaten:

ok daran erkennt man das ich noch ein Anfänger bin :P
Danke für die Hilfe werde jetzt mal beide Codes vergleichen ^^
Der Kreis ist einge geometrische Figur wo an allen
Ecken und Kanten gespart wurde
Antworten