Seite 1 von 1
Konsolen Menüs
Verfasst: Montag 1. September 2008, 21:18
von Imperator
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

Verfasst: Montag 1. September 2008, 21:54
von EyDu
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

und

. ^^
Verfasst: Dienstag 2. September 2008, 10:40
von Imperator
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:
Verfasst: Dienstag 2. September 2008, 11:01
von 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.
Verfasst: Donnerstag 16. Oktober 2008, 10:02
von roschi
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
Verfasst: Donnerstag 16. Oktober 2008, 10:30
von numerix
Zeile 36 ist zu umständlich! Statt:
genügt:
Verfasst: Donnerstag 16. Oktober 2008, 15:24
von 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.
Verfasst: Freitag 17. Oktober 2008, 13:13
von roschi
vielen dank!
das ist bestimmt besser:
http://paste.pocoo.org/show/88780/
lg
roschi
[edit]
noch was gefixt
[/edit]
Verfasst: Freitag 17. Oktober 2008, 14:29
von Hyperion
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

Verfasst: Freitag 17. Oktober 2008, 16:06
von roschi
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
lg
roschi