2008-11-29 90 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() 

這把你所有的將可能的行爲的功能轉換成字典,關鍵是你將輸入什麼來運行該功能。然後它從列表中檢索動作輸入動作,除非輸入動作不存在,在這種情況下,它將檢索no_such_action。

後,您有如何工作的一個基本的瞭解,如果你正在考慮做一個嚴肅的商業命令行式的應用程序,我會看着cmd framework的命令行應用程序。

+0

爲什麼如果我將字典更改爲「foo」,這會中斷:action1(),? – 2013-01-15 04:15:07

2

您可以使用if ... elif。如果你必須選擇一個數字,它會是這樣:

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

+1:Python「switch」拼寫爲「if」; 「case」拼寫爲「elif」。 – 2008-11-29 20:06:38

2

全都從「一個Python簡介」一書一看這topic。 Switch語句被一個if..elif..elif序列替代。

5

一般情況下,如果elif會很好,但如果您有很多情況,請考慮使用字典。

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

你的第一個問題,我同意阿里A.

你的第二個問題:

進口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」作爲他們的選項,則選擇將被賦予「第二值」的值。我本可以讓它更有趣,但我想盡量簡化,雖然拉來的請求是非常受歡迎的。

相關問題