python中的用户输入

时间:2014-03-04 02:59:30

标签: python python-2.7

我正在制作一个脚本,为用户提供了许多可供选择的选项,例如

选择功能选项

  1. A - 做A(描述)
  2. B - 做B(描述)
  3. C - 做C(描述)
  4. D - 做D(描述)
  5. (如果选择A)选择A子功能

    1. A1 - 做A1(描述)
    2. A2 - 做A2(描述)
    3. A3 - 做A3(描述)
    4. (如果选择了B)选择B子功能

      1. B1 - 做B1(描述)
      2. B2 - 做B2(描述)
      3. B3 - 做B3(描述)
      4. 依旧......

        每个选项都可供选择选项,并根据选择,python程序将继续。请注意,在每个选项之前,我提供print

          print ''' Enter Directory 
          1. Current Working Directory 
          2. CHoose other folder'''
        

        然后我使用raw_input来接受用户输入,这在这种情况下基本上意味着对用户的大量提示(以及杂乱的代码)。我怀疑这可能不是最好的设计。

        我的问题是我正确地做了还是有其他方法我错过了?

4 个答案:

答案 0 :(得分:2)

一种方法是在用户运行函数时提供命令行输入(argv)。如果elif情况下代码可以根据用户输入执行特定的块。

例如下面的内容:

类似的东西 - 如果用户以' example.py argv [1]'运行程序,argv [1]可以是内部函数名,如A,B ......

if sys.argv[1] == 'A':
    function_name = raw_input("enter A1/A2/A3":)
    func(function_name)

elif sys.argv[1] == 'B':
    function_name = raw_input("enter B1/B2/B3":)
    func(function_name)
else:
    print >> sys.stderr,'usage:example.py A|B|...'

答案 1 :(得分:0)

您可以创建一个字典,其中键是用户可能的输入,值是指向下一个可用字典的指针。使原始输入成为循环内调用的函数。在适当的位置退出循环。

答案 2 :(得分:0)

您可以为选项/选项的每个“级别”保留一个字典,其中函数作为值,用户输入作为键:

primary = {'A':opt_a, 'B':opt_b, 'C':opt_c, 'D':opt_d}
secondary = {'A1':opt_a1, 'B':opt_b1, 'C1':opt_c1, 'D1':opt_d1}

opt = raw_input("Choose - A, B, C, D - ")
opt_func = primary.get(opt)

if not opt_func:
    print "Invalid Option"
else:
    opt_func()

def opt_a():
    opt = raw_input("Choose - A1, A2, A3, A4 - ")
    opt_func = secondary.get(opt)
    if not opt_func:
        return "Invalid Option"
    opt_func()             

def opt_b()...

然后对每个选项想要做的许多层执行相同的操作。

答案 3 :(得分:0)

一个选项(ha!)是将选项的结构存储在变量中。

例如,(在您的脑海中)将“菜单”定义为包含这些值的某些子集的dict:

  • “问题” - 这是在显示菜单时要问的问题 - “选择B子功能”
  • “description” - 这是您选择进入此菜单的选项 - 例如,对于“选择B子选项”,这将是“B” - 您选择到达此处的答案。第一个菜单不会有这个。
  • “suboptions” - 这是此处的菜单列表。
  • “code” - 如果存在,则运行此代码,而不是显示此菜单。

上面给出的例子

def function_for_A1():
    print "You chose A1!"

menus={"question":"Choose function Options","answers":[
          {"description":"A","question":"Choose A Subfunctions","answers":[
              {"description":"A1","code":function_for_A1},
              {"description":"A2","code":function_for_A2},
          ]},
          {"description":"B","question":"Choose B Subfunctions","answers":[
              {"description":"B1","code":function_for_A1},
              {"description":"B2","question":"B2 sub-suboption","answers":[...]},
          ]},
}

一旦你有这个结构,给定当前菜单,显示它是相当容易的 - 运行代码(如果它存在),否则显示问题,并为每个答案显示一个数字和“描述”。一旦他们选择了一个号码,找到菜单,洗,rince,重复。你可以使菜单函数递归,所以如果他们选择“0 - back”,那么你从当前函数返回。

完成!