2012-03-23 54 views
0

你好进出口新的蟒蛇,并已阅读文档过去,因与argparse澄清在Python 3.2 argparse请

这里麻烦的是我试图它onsimple解释一个头脑简单的人代码,请 感谢提前

#!/usr/bin/env python 
import argparse 
from string import ascii_lowercase 
from string import ascii_uppercase 
from string import digits 
from string import punctuation 

def options(): 
    parser = argparse.ArgumentParser(description="Create a list of characters") 
    parser.add_argument('-c:') 
    if (args.c):# == "-c:": 
     if "-c" + ":" + "caps": 
      charset = ascii_uppercase 
     elif "-c:" + "small": 
      charset = ascii_lowercase 
     elif "-c:" + "digits": 
      charset = digits 
     elif "-c:" + "punc": 
      charset = punctuation + " " 
     elif "-c:" + "space": 
      charset = " " 
     elif "-c:" + "all": 
      charset = ascii_lowercase + ascii_uppercase + digits + punctuation + space 
     else: 
      print("when using -c you must include an option! (caps, small, digits, punc, space, all)") 

def filename(): 
    filename = open('C:\\Users\\MSec\\Desktop\\WordLists\\'+sys.argv[1], 'w') 
    return 

if __name__ == "__main__": 
    filename() 
    options() 

再次即时通讯新didnt相当了解的文档

我猜,而IM它是有一个更好的(或更Python)的方式来编写所有的选项,而不是很多的elif STA tements?

谢谢大家

回答

0

你所有的if语句都是真的。

if "-c" + ":" + "caps": 

手段

if "-c:caps": 

字符串 “-c:帽” 是非假。其余类似的if语句也是如此。

你大概的意思

if args.c == 'caps': 

没有,也往往没有更好的方式elifs一个长长的清单。还有其他方法,但这是最容易写和理解的,因此是最好的。

在这种情况下,然而,你可以做一本字典:

CHAR_OPTIONS = {'caps': ascii_uppercase, 
       'small': ascii_lowercase, 
       etc.... 
       } 

并使用它像这样:

charset = CHAR_OPTIONS[args.c] 
+0

感谢有道理但是现在它返回没有定义的全局名称ARGS但如果它被用在def选项中,使它成为一个局部变量是可以接受的。 – 2012-03-23 21:49:52

+0

@learn_What:不,它不会返回“现在”。你的例子也是这样做的,我假设你在复制时发生错误。你的例子忘记了实际调用parser.parse()。你需要做的就是停止写很多不起作用的代码,然后试着让它工作。而是一次只写一点代码,然后让这些代码工作,然后对其进行扩展。所以在这一点上,你应该重新开始,并且一次写入一行,两行或三行代码,并确保这些行能够正常工作,然后再逐行添加更多的行。然后问你有问题的问题。 – 2012-03-24 09:03:41