【问题标题】:Going back to beginning of the code回到代码的开头
【发布时间】:2013-12-13 20:23:35
【问题描述】:

我想制作从选择模式开始的程序。然后它应该保持在该模式,直到我给它命令返回模式选择。像这样:

input=raw_input('Select mode, insert number of wanted mode: \n 1. first mode \n 2. second mode \n 3. Third mode\n')

if input=='1':
   while True:
      #code

if input=='2':
   while True:
      #code

if input=='3':
   while True:
      #code

使用特定命令使其返回模式选择的最佳和最短方法是什么?

谢谢

【问题讨论】:

  • 提示:您应该避免将变量命名为与内置函数之一相同的名称。这样做会使它们蒙上阴影,从而使它们在当前范围内无法使用。

标签: python


【解决方案1】:

使用break 退出(内部)while True 循环:

while True:
    input=raw_input('Select mode, insert number of wanted mode: \n 1. first mode \n 2. second mode \n 3. Third mode\n')

    if input=='1'
       while True:
          #code
          if something_happens:
              break

    elif input=='2':
       while True:
           #code

    elif input=='3':
       while True:
           #code

有关break的更多信息,请参阅官方文档here

【讨论】:

    【解决方案2】:

    如何将模式选择放在自己的函数中,然后您可以随时调用该函数?

    def get_mode():
        input=raw_input('Select mode, insert number of wanted mode: \n 1. first mode \n 2. second mode \n 3. Third mode\n')
        return input
    

    【讨论】:

      【解决方案3】:

      如评论中所述,您应该避免使用内置变量名称,例如 input

      正确的方法是通过字典来选择函数,以及处理意外输入的异常。全部嵌套在 main 的 while 循环中。

      我写了一个简短的例子,基本上是基于这个: python - Simulating 'else' in dictionary switch statements

      import sys
      
      def mode1( arg = None ):
        return 'Mode1 completed'
      
      def mode2( arg = None ):
        return 'Mode2 completed'
      
      def mode3( arg = None ):
        return 'Mode3 completed'
      
      def modeQuit ( arg = None ):
        sys.exit(0)
      
      def main():
        menuText = "Select mode, insert number of wanted mode: \n 1. first mode \n 2. second mode \n 3. Third mode\n"
      
        # Function dictionary
        mode_function = {
            '1' : mode1,
            '2' : mode2,
            '3' : mode3,
            'q' : modeQuit
            }
      
        data=None
      
        print mode_function
      
        while True:
          mode_selection = raw_input(menuText).strip()
          try:
            print mode_function[mode_selection](data)
          except KeyError:
            print 'Not a valid mode'
      
        return 0
      
      if __name__ == '__main__':
        main();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-11
        • 1970-01-01
        • 2022-09-22
        • 1970-01-01
        • 2014-02-13
        • 1970-01-01
        • 1970-01-01
        • 2016-05-08
        相关资源
        最近更新 更多