2012-03-23 103 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