Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中如何循环具有子菜单的菜单?_Python_Loops_Menu - Fatal编程技术网

在python中如何循环具有子菜单的菜单?

在python中如何循环具有子菜单的菜单?,python,loops,menu,Python,Loops,Menu,我正在尝试创建一个带有子菜单的主菜单。我想这样做,无论用户从主菜单到子菜单选择什么顺序,他们最终都会被引导回主菜单——也就是说,直到他们选择最后一个选项(3.按住并结束旋转) 这就是我被卡住的地方。现在,用户只能浏览一次菜单序列。如何使其成为重复循环 #main menu playermenumain=raw_input("What would you like to do?\n (1) Buy\n (2)Sell\n (3)Hold and end turn ") if playermenu

我正在尝试创建一个带有子菜单的主菜单。我想这样做,无论用户从主菜单到子菜单选择什么顺序,他们最终都会被引导回主菜单——也就是说,直到他们选择最后一个选项(3.按住并结束旋转)

这就是我被卡住的地方。现在,用户只能浏览一次菜单序列。如何使其成为重复循环

#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

尝试使用带中断的while-True循环,而不是使用已有的while条件。例如:

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

尝试使用带中断的while-True循环,而不是使用已有的while条件。例如:

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

您应该将主菜单代码放入一个方法中,并在循环中调用该方法。每个子菜单也应该是一个方法调用,并且在返回上一个菜单时应该返回


您应该查找基本方法使用和程序流程;这更像是一个一般的编程概念,而不是一个特定的语言问题。它几乎对你将要做的每件事都至关重要,因此你应该花时间真正理解它。

你应该把主菜单代码放在一个方法中,并在循环中调用该方法。每个子菜单也应该是一个方法调用,并且在返回上一个菜单时应该返回


您应该查找基本方法使用和程序流程;这更像是一个一般的编程概念,而不是一个特定的语言问题。这几乎对你将要做的每件事都至关重要,因此你应该花时间真正理解它。

我有几点建议:

  • 创建函数menu()以a)显示菜单,b)拒绝无效响应,c)返回有效响应。此菜单将删除代码中的冗余,因为您需要它3次
  • 将销售逻辑移到一个单独的函数中,我们称之为sell()
  • 同样,将购买逻辑移动到购买()
  • 使用下划线使标识符(变量和函数名)更易于阅读。我更喜欢“主菜单”而不是“玩家菜单”
  • 有了这些建议,我的实施是:

    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)
    
    def菜单(提示、选项):
    打印'\n\n{0}\n'。格式(提示)
    计数=len(选项)
    对于范围内的i(计数):
    打印“({0}){1}”。格式(i+1,选项[i])
    响应=0
    当响应<1或响应>计数时:
    response=raw_输入('键入一个数字(1-{0}):'。格式(计数))
    if response.isdigit():
    响应=int(响应)
    其他:
    响应=0
    返回响应
    def购买(股票金额、债券金额):
    响应=菜单(‘买什么?’、[‘股票’、‘债券’、‘无需担心’))
    #做点什么
    def销售(库存金额、债券金额):
    响应=菜单(‘卖什么?’,[‘股票’、‘债券’、‘无需担心’)
    #做点什么
    # ======================================================================
    #主程序从这里开始
    # ======================================================================
    库存量=10000
    债券金额=10000
    主菜单响应=0
    当主菜单响应时!=三:
    main_menu_response=menu('to do?',['Buy','Sell','End'])
    如果主菜单响应=1:
    购买(股票金额、债券金额)
    elif主菜单\响应==2:
    出售(股票金额、债券金额)
    
    我有几个建议:

  • 创建函数menu()以a)显示菜单,b)拒绝无效响应,c)返回有效响应。此菜单将删除代码中的冗余,因为您需要它3次
  • 将销售逻辑移到一个单独的函数中,我们称之为sell()
  • 同样,将购买逻辑移动到购买()
  • 使用下划线使标识符(变量和函数名)更易于阅读。我更喜欢“主菜单”而不是“玩家菜单”
  • 有了这些建议,我的实施是:

    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)
    
    def菜单(提示、选项):
    打印'\n\n{0}\n'。格式(提示)
    计数=len(选项)
    对于范围内的i(计数):
    打印“({0}){1}”。格式(i+1,选项[i])
    响应=0
    当响应<1或响应>计数时:
    response=raw_输入('键入一个数字(1-{0}):'。格式(计数))
    if response.isdigit():
    响应=int(响应)
    其他:
    响应=0
    返回响应
    def购买(股票金额、债券金额):
    响应=菜单(‘买什么?’、[‘股票’、‘债券’、‘无需担心’))
    #做点什么
    def销售(库存金额、债券金额):
    响应=菜单(‘卖什么?’,[‘股票’、‘债券’、‘无需担心’)
    #做点什么
    # ======================================================================
    #主程序从这里开始
    # ======================================================================
    库存量=10000
    债券金额=10000
    主菜单响应=0
    当主菜单响应时!=三:
    main_menu_response=menu('to do?',['Buy','Sell','End'])
    如果主菜单响应=1:
    购买(股票金额、债券金额)
    elif主菜单\响应==2:
    出售(股票金额、债券金额)
    
    原始输入的参数中发生了什么?您显示的语法看起来不正确。
    raw\u input
    的参数中发生了什么?您显示的语法看起来不正确。谢谢。。。这很有帮助!谢谢这很有帮助!