2017-02-03 6 views
0

を作成しますメインメニュー、全体のメニューシステムが壊れました。 が空であることを原因とは、私は、メインメニューの次のコードを持っているメニューとサブメニュー表示

p = '' 

別のサブメニューインスタンスを呼び出す中断したところ、親メニューが続いていること現れました。

は、ここで述べたエラーの例です:

>>> value = mainmenu() 

M A I N M E N U 
1. Settings 
q. Quit 
Select an option: 1 

S U B M E N U 
1. Perform an action 
b. Back 
q. Quit 
Select an option: b 

M A I N M E N U 
1. Settings 
q. Quit 
Select an option: 1 

S U B M E N U 
1. Perform an action 
b. Back 
q. Quit 
Select an option: 1 
>>> 
>>> value 
>>> 

しかし、私は、サブメニューから「オプション1」を選択し、「戻る」オプションを使用しない場合は、すべてが期待どおりに動作します。

>>> value = mainmenu() 

M A I N M E N U 
1. Settings 
q. Quit 
Select an option: 1 

S U B M E N U 
1. Perform an action 
b. Back 
q. Quit 
Select an option: 1 
>>> 
>>> value 
'Do something' 
>>> 

「戻る」オプション機能を修正するにはどうすればよいですか?

私はメインメニューのオプション1の下にreturn文を挿入しようとしましたが、考えられるところでは動作しませんでした。私はいくつかの論理と説明やヘルプが欠けている非常に感謝しています。

... 
    elif option == '1': 
      d = submenu() 
      return 
... 

アップデート1
- ==オプションの下のMainMenuする変数 "MSG" を追加しました '1' とタプルを返します。

def mainmenu(): 
    d = '' 
    msg = '' # Added in Update #1 
    while d == '': 
     print ('\nM A I N M E N U') 
     print ('1. Settings') 
     print ('q. Quit') 
     option = input ('Select an option: ') 
     if option.lower() == 'q': 
      sys.exit() 
     elif option == '1': 
      msg = 'Option 1' # Added in Update #1 
      d = submenu() 
     else: 
      print ('Invalid selection!') 
    return msg, d # Modified in Update #1 

- 解凍され、主にタプル(印刷)

message, action = mainmenu() 

print ('\nMessage: ', message) 
print ('Action: ', action) 

作品以下の答えが、オプション「B」が選択されている別の問題を導入します。

M A I N M E N U 
1. Settings 
q. Quit 
Select an option: 1 

S U B M E N U 
1. Perform an action 
b. Back 
q. Quit 
Select an option: b 

M A I N M E N U 
1. Settings 
q. Quit 
Select an option: 1 

S U B M E N U 
1. Perform an action 
b. Back 
q. Quit 
Select an option: 1 

Message: Option 1 
Action: ('Option 1', 'Do something') # <<<<<< Return a Tuple? 

ステートメントは、私がすでにmain()から解凍したタプルを返します。オプション 'b'が選択されていない場合の動作例を次に示します。

M A I N M E N U 
1. Settings 
q. Quit 
Select an option: 1 

S U B M E N U 
1. Perform an action 
b. Back 
q. Quit 
Select an option: 1 

Message: Option 1 
Action: Do something 

答えて

0

前述のように、問題はサブメニューのメインメニューの再帰呼び出しです。言い換えると、サブメニューは、「戻る」キーが押されるたびに、メインメニューの新しいインスタンスを作成しました。それを解決するには、別のメインメニューを呼び出さずにメインメニューに戻るだけです。サブメニューから

elif option.lower() == 'b': 
    return 

この方法では、whileループは、そのために考慮する必要がありますMAINMENUに "None" を返しません。

def mainmenu(): 
    d = None 
    msg = '' 
    while d is None: 
    .... 
0

これはあなたがNoneを返すために起こっています。

elif option.lower() == 'b': 
    mainmenu() 
    return 

あなたは1を押したときに、すべての戻り値は「トップ」に戻ってクロールし、その過程であなたがNoneTypeを導入している、再帰的にmainmenu()をコードを呼び出しています。

単に関数を返すだけで動作します。

elif option.lower() == 'b': 
    return mainmenu() 
関連する問題