2008-11-29 1 views

ответ

13

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

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() 

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

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

+0

Почему это происходит, если я изменяю словарь на «foo»: action1(),? – 2013-01-15 04:15:07

2

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

n = chosenOption() 
if(n == 0): 
    doSomething() 
elif(n == 1): 
    doAnyOtherThing() 
else: 
    doDefaultThing() 
+0

+1: Python «переключатель» пишется «если»; «case» пишется «elif». – 2008-11-29 20:06:38

2

Посмотрите на эту topic от «Введение в Python» книги. Оператор switch заменяется на последовательность if..elif..elif.

5

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

actions = {1: doSomething, 2: doSomethingElse} 
actions.get(n, doDefaultThing)() 
0

К вашему первому вопросу я согласен с Али А.

Для вашего второго вопроса:

импорт SYS
sys.exit (1)

0

Я пришел сюда в поисках той же вещи, и в конечном итоге написание мой собственный: 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» в качестве своего варианта, тогда для выбора будет присвоено значение «Второе значение». Я мог бы сделать это более увлекательным, но я хотел, чтобы все было просто, хотя запросы на тягу очень приветствуются.