2012-11-18 46 views
0

Python 3沒有GOTO或類似的東西。但我有一些算法,需要GOTO類型的功能。 可能有人可以建議出路嗎?轉到Python 3

主菜單

1 - 新遊戲 2選項 3-退出

用戶的行動 - 進入到主菜單 - 進入到選項菜單 - 進入到主菜單,再等等。所以在代碼中,我不知道如何返回並用主菜單傳送到上面的代碼。

+1

該算法不需要轉到,或任何遠程喜歡它。如果Python實現具有尾部調用優化(他們不這樣做),那麼簡單遞歸就可以工作。缺乏這一點,一堆函數和一個循環將它們捆綁在一起並處理切換就足夠了,而且仍然非常簡單。 – delnan

+0

@delnan:是的,[通過蹦牀可以在Python中實現尾部調用消除](http://ideone.com/I3T3wq),但對於初學者來說,延續傳遞樣式可能並不容易理解。 – jfs

+0

@ J.F.Sebastian我不是在說做完全蹦牀。我甚至不確定自己能夠理解CPS計劃。用於選擇下一個要調用的函數的簡單標記返回值(在你的例子中,'x'不是來自標準輸入,而是來自'actions [x]()'),工作得很好。屏幕的執行本身並不一定涉及到。根據菜單的使用方式,「蹦牀」循環甚至不需要堆棧(或類似的狀態)。 – delnan

回答

1

你可以使用字典:「用戶選擇」 - >「相應行動」例如爲:

import sys 

def foo(): 
    print('foo') 

actions = {'1': foo, '2': sys.exit} 

def read_choice(choices, prompt): 
    c = None 
    while c not in choices: 
     c = input(prompt) 
    return c 

while True: 
    # get user input 
    x = read_choice(actions, 'Input 1 to do foo or 2 to exit') 
    actions[x]() # act on it 

complete example也顯示瞭如何從配置文件中動態創建菜單。

+0

謝謝,試圖理解。 :) – RedSubmarine