1

サブメニューを含むメイン メニューを作成しようとしています。ユーザーがメインメニューからサブメニューにどの順序で選択しても、最終的にはメインメニューに戻るようにしたいと考えています。つまり、最後のオプション (3. ホールドしてターンを終了する) を選択するまでです。 .

これは私が立ち往生しているところです。現在、ユーザーはメニュー シーケンスを 1 回しか実行できません。これを繰り返しループにするにはどうすればよいですか?

#main menu
playermenumain=raw_input("What would you like to do?\n (1) Buy\n (2)Sell\n (3)Hold and end turn ")

if playermenumain=="1":

        buyermenu=raw_input("In what area would you like to buy?"\n (1)Stocks\n (2) Bonds\ (3) Nevermind\n)
        if buyermenu=="1":
            stockamount=stockamount+500
        elif buyermenu=="2":
            bondamount=bondamount+500
        else:
            buyermenu=raw_input("In what area would you like to buy?"\n (1)Stocks\n (2) Bonds\ (3) Nevermind\n) 

if playermenumain=="2":

    sellermenu=raw_input("In what area would you like to buy?"\n (1)Stocks\n (2) Bonds\ (3) Nevermind\n)
        if sellermenu=="1":
            stockamount=stockamount-500
        elif sellermenu=="2":
            bondamount=bondamount-500
        else:
            sellermenu=raw_input("In what area would you like to buy?"\n (1)Stocks\n (2) Bonds\ (3) Nevermind\n) 

if playermenumain=="3":

    break
#main menu loop: no matter what is selected, player is directed back to main menu until option 3 (end turn) is selected:

while playermenumain=="1" or playermenumain=="2":

        playermenumain=raw_input("What would you like to do?\n (1) Buy\n (2)Sell\n (3)Hold and end turn ")
        continue
4

3 に答える 3

1

while 条件の代わりに、ブレーク付きの while True ループを使用してみてください。例えば:

def submenu_buy():
  # Put your submenus here
  pass

def submenu_sell():
  # Put your submenus here
  pass

while True:
  playermenumain=raw_input("What would you like to do?\n (1) Buy\n (2)Sell\n (3)Hold and end turn ")
  if playermenumain == "1":
    submenu_buy()
  elif playermenumain == "2":
    submenu_sell()
  elif playermenumain == "3":
    break
于 2013-01-11T22:06:22.793 に答える
0

私はいくつかの提案があります:

  1. 関数menu()を作成して、a)メニューを表示し、b)無効な応答を拒否し、c)有効な応答を返します。このメニューは、必要に応じてコードの冗長性を3回削除します。
  2. 販売ロジックを別の関数に移動し、sell()と呼びましょう
  3. 同様に、購入ロジックをbuy()に移動します
  4. アンダースコアを使用して、識別子(変数と関数名)を読みやすくします。「playermenumain」よりも「main_menu_response」の方が好きです

これらの提案により、私の実装は次のようになります。

def menu(prompt, choices):
    print '\n\n{0}\n'.format(prompt)
    count = len(choices)
    for i in range(count):
        print '({0}) {1}'.format(i + 1, choices[i])
    response = 0
    while response < 1 or response > count:
        response = raw_input('    Type a number (1-{0}): '.format(count))
        if response.isdigit():
            response = int(response)
        else:
            response = 0
    return response

def buy(stockamount, bondamount):
    response = menu('What to buy?', ['Stocks', 'Bonds', 'Nevermind'])
    # Do something

def sell(stockamount, bondamount):
    response = menu('What to sell?', ['Stocks', 'Bonds', 'Nevermind'])
    # Do something

# ======================================================================
# Main program starts here
# ======================================================================
stockamount=10000
bondamount=10000

main_menu_response = 0
while main_menu_response != 3:
    main_menu_response = menu('What to do?', ['Buy', 'Sell', 'End'])
    if main_menu_response == 1:
        buy(stockamount, bondamount)
    elif main_menu_response == 2:
        sell(stockamount, bondamount)
于 2013-01-11T23:02:25.380 に答える
0

メイン メニュー コードをメソッドに入れ、そのメソッドをループで呼び出す必要があります。各サブメニューもメソッド呼び出しである必要があり、前のメニューに戻ったときに戻る必要があります。

基本的なメソッドの使用法とプログラムの流れを調べる必要があります。これは、特定の言語の問題というよりも、一般的なプログラミングの概念です。これはあなたが行うほとんどすべてのことにおいて重要なので、時間をかけて本当に理解する必要があります。

于 2013-01-11T22:07:48.743 に答える