0
Python 3沒有GOTO或類似的東西。但我有一些算法,需要GOTO類型的功能。 可能有人可以建議出路嗎?轉到Python 3
主菜單
1 - 新遊戲 2選項 3-退出
用戶的行動 - 進入到主菜單 - 進入到選項菜單 - 進入到主菜單,再等等。所以在代碼中,我不知道如何返回並用主菜單傳送到上面的代碼。
Python 3沒有GOTO或類似的東西。但我有一些算法,需要GOTO類型的功能。 可能有人可以建議出路嗎?轉到Python 3
主菜單
1 - 新遊戲 2選項 3-退出
用戶的行動 - 進入到主菜單 - 進入到選項菜單 - 進入到主菜單,再等等。所以在代碼中,我不知道如何返回並用主菜單傳送到上面的代碼。
你可以使用字典:「用戶選擇」 - >「相應行動」例如爲:
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也顯示瞭如何從配置文件中動態創建菜單。
謝謝,試圖理解。 :) – RedSubmarine
該算法不需要轉到,或任何遠程喜歡它。如果Python實現具有尾部調用優化(他們不這樣做),那麼簡單遞歸就可以工作。缺乏這一點,一堆函數和一個循環將它們捆綁在一起並處理切換就足夠了,而且仍然非常簡單。 – delnan
@delnan:是的,[通過蹦牀可以在Python中實現尾部調用消除](http://ideone.com/I3T3wq),但對於初學者來說,延續傳遞樣式可能並不容易理解。 – jfs
@ J.F.Sebastian我不是在說做完全蹦牀。我甚至不確定自己能夠理解CPS計劃。用於選擇下一個要調用的函數的簡單標記返回值(在你的例子中,'x'不是來自標準輸入,而是來自'actions [x]()'),工作得很好。屏幕的執行本身並不一定涉及到。根據菜單的使用方式,「蹦牀」循環甚至不需要堆棧(或類似的狀態)。 – delnan