Konsolen Menüs

Code-Stücke können hier veröffentlicht werden.
Antworten
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Hallo allerseits,

ich melde mich auch mal wieder zurück. Mit einer kleinen aber meiner Meinung nach doch recht nützlichen Funktion zur darstellung von Menüs in der Konsole. Wenn man das da oft braucht erspart es wirklich ne Menge Schreibarbeit.

Code: Alles auswählen

def waehlen(moeglichkeiten):
        moeglichkeiten = moeglichkeiten.split(', ')
        nummer = 0
        for i in range(len(moeglichkeiten)):
            moeglichkeiten[nummer] = str(nummer) + moeglichkeiten[nummer] + ' '
        nummer = nummer + 1
        element = 0
        moeglichkeiten_2 = ''
        for i in range(len(moeglichkeiten)):
            moeglichkeiten_2 = moeglichkeiten_2 + moeglichkeiten[element]
            element = element + 1
        eingabe = raw_input('Bitte waehlen sie zwischen ' + moeglichkeiten_2 + ' ')
        return eingabe
Urteilt selbst :D
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ist jetzt ungetestet, aber das hier sollte in etwa das selbe liefern:

Code: Alles auswählen

def waehlen(moegl): 
    m = " ".join("%d%s" % x for x in enumerate(moegl.split(', ')))
    return raw_input("Bitte waehlen Siezwischen %s " % m)
Da ich es aber etwas unsinnig finde, die Menüeinträge als durch Kommas getrennte Strings zu übergeben, ist eine Liste/ein Tupel ... die schönere Lösung:

Code: Alles auswählen

def waehlen(moegl): 
    m = " ".join("%d%s" % x for x in enumerate(moegl))
    return raw_input("Bitte waehlen Sie zwischen %s " % m)
Aber was bringt mir ein Auswahlmenü, bei dem die Auswahl nicht sofort überprüft wird? Dann muss man einen Großteil der Logik immer wieder erneut implementieren.

Bei dem range(len(...)) mit einem zusätzlichen eigenen Zähler war mein Gesichtsausdruck in etwa eine Mischung aus :shock: und :lol:. ^^
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

EyDu hat geschrieben:
Aber was bringt mir ein Auswahlmenü, bei dem die Auswahl nicht sofort überprüft wird? Dann muss man einen Großteil der Logik immer wieder erneut implementieren.

^^
das bringt dir, dass du nur noch schreiben musst:

Code: Alles auswählen

auswahl = waehlen()
if auswahl == 1:
 ...
BlackJack

@Imperator: Eben nicht! Du musst jedes mal wenn Du die Funktion verwendest, ausserhalb der Funktion überprüfen ob die `auswahl` überhaupt gültig ist. Etwas was man eigentlich *in* der Auswahlfunktion erledigen sollte, inklusive Wiederholung der Abfrage, wenn der Benutzer etwas Falsches eingegeben hat.
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

hallo!

wie findet ihr das hier?
http://paste.pocoo.org/show/88186/

beispiel:

Code: Alles auswählen

import ConsoleMenu

def do_anything(choice):
    print "%d choosed" % choice

ConsoleMenu.menu(("Funktion1", "Funktion2"),
                 prompt="Please choose: ",
                 headline="MainMenu:",
                 callback={1:do_anything})
mfg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

roschi hat geschrieben:wie findet ihr das hier?
http://paste.pocoo.org/show/88186/
Zeile 36 ist zu umständlich! Statt:

Code: Alles auswählen

if not choice in xrange(1, len(entries) + 1):
genügt:

Code: Alles auswählen

if not 0<choice<=len(entries):
BlackJack

Ich finde das `callback`-Dictionary keine so gute Idee. Menüpunkte und Rückruffunktion gehören zusammen. So wird's immer "lustig" wenn man einen Haufen Menüpunkte mit Rückruffunktionen hat und einen einfügen oder entfernen möchte. Dann geht das fröhliche Umnummerieren los.
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

vielen dank!

das ist bestimmt besser:
http://paste.pocoo.org/show/88780/

lg
roschi

[edit]
noch was gefixt
[/edit]
Zuletzt geändert von roschi am Mittwoch 22. Oktober 2008, 19:34, insgesamt 1-mal geändert.
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wobei es in Deinem Beispiel für den Nutzer verwirrend sein dürfte, wieso er Item 0 als gewählt präsentiert, wo er doch die 1 eingegeben hat ;-)

Erinnert mich an die tollen Bahn-Automaten, bei denen man an einer Stelle eine 0 eingeben mußte, wenn man keine Bahncard hatte o.ä. (anno 2005) Fand ich als Informatiker ja irgend wie lustig ... aber für jemand unbedarfteren ist das schon mal ne Hürde! "Ssank you for travvelling wiss Deutsche Bahn!" kann ich da nur sagen :-D
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

hallo!

danke fuer das feedback!

ich habe das so gemacht, damit die auswahl mit der stelle uebereinstimmt, an der die menueeintraege in der liste stehen. wer es anders haben moechte, kann das ja einfach umaendern. es sind ja nur ein paar mal ' - 1', die er wegmachen muss. :)
Hyperion hat geschrieben:Erinnert mich an die tollen Bahn-Automaten, bei denen man an einer Stelle eine 0 eingeben mußte, wenn man keine Bahncard hatte o.ä. (anno 2005) Fand ich als Informatiker ja irgend wie lustig ... aber für jemand unbedarfteren ist das schon mal ne Hürde! "Ssank you for travvelling wiss Deutsche Bahn!" kann ich da nur sagen
:lol:

lg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Antworten