Предложение реализовать текстовое меню без переключателя - PullRequest
2 голосов
/ 29 ноября 2008

Я делаю свои первые шаги на Python. Я видел, что у нас нет оператора переключения регистра, так что вы, ребята, хотели бы реализовать текстовое меню на python?

Спасибо

Ответы [ 6 ]

13 голосов
/ 29 ноября 2008

Вы можете сделать что-то вроде этого:

def action1():
    pass # put a function here

def action2():
    pass # blah blah

def action3():
    pass # and so on

def no_such_action():
    pass # print a message indicating there's no such action

def main():
    actions = {"foo": action1, "bar": action2, "baz": action3}
    while True:
        print_menu()
        selection = raw_input("Your selection: ")
        if "quit" == selection:
            return
        toDo = actions.get(selection, no_such_action)
        toDo()

if __name__ == "__main__":
    main()

Это помещает все функции ваших возможных действий в словарь с ключом, который вы будете вводить для запуска функции. Затем он извлекает действие ввода действий из списка, если только действие ввода не существует, и в этом случае он получает no_such_action.

После того, как вы получите общее представление о том, как это работает, если вы планируете создать приложение типа командной строки Serious Business, я бы посмотрел на cmd framework для приложений командной строки .

5 голосов
/ 29 ноября 2008

Как правило, если с elif все будет в порядке, но если у вас много дел, рассмотрите возможность использования dict.

actions = {1: doSomething, 2: doSomethingElse}
actions.get(n, doDefaultThing)()
2 голосов
/ 29 ноября 2008

Взгляните на эту тему из книги "Введение в Python". Оператор Switch заменяется последовательностью if..elif..elif.

2 голосов
/ 29 ноября 2008

Вы можете использовать, если ... elif. Если вам нужно выбрать номер, это будет выглядеть так:

n = chosenOption()
if(n == 0):
    doSomething()
elif(n == 1):
    doAnyOtherThing()
else:
    doDefaultThing()
0 голосов
/ 09 марта 2012

Я пришел сюда в поисках того же самого и в итоге написал свой: https://github.com/gerrywastaken/menu.py

Вы называете это так:

import menu

message = "Your question goes here"
options = {
    'f': ['[F]irst Option Name', 'First value'],
    's': ['[S]econd Option Name', 'Second value'],
    't': ['[T]hird Option Name', 'Third value']
}

selection = menu.getSelection(message, options)

Он предоставляет пользователю меню, и они могут выбрать нужный вариант, используя символы в скобках. Если они введут «s» в качестве своей опции, тогда выбору будет присвоено значение «Второе значение». Я мог бы сделать это более интересным, но я хотел, чтобы все было просто, хотя запросы на получение очень приветствуются.

0 голосов
/ 29 ноября 2008

На ваш первый вопрос я согласен с Али А.

На ваш второй вопрос:

import sys
sys.exit (1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...