2014-02-13 52 views
2

我寫了一些代碼,可以吐出指定長度,副本數量,指定概率等的dna序列。在IDLE中,程序工作正常,因爲我預設了我想要的概率。我希望這個程序能夠從命令行高效運行。如何將概率指定爲我的dna生成器的命令行參數?

如何使我的概率(權重)像命令行參數一樣運行,就像我對長度和副本數所做的一樣?我不知道如何將這些概率作爲參數併入命令行。謝謝你的幫助! 下面是代碼:

#!/usr/bin/env python 

import sys 
import random 

weights=[.25,.25,.25,.25] 
dna=['A','G','C','T'] 

def weighted_choice(weights,dna): 
    totals = [] 
    running_total = 0 

    for w in weights: 
     running_total += w 
     totals.append(running_total) 

    rnd = random.random() * running_total 
    for i, total in enumerate(totals): 
     if rnd < total: 
      return dna[i] 

def dna_gen(length): 

    seq='' 

    for i in range(length): 
     seq=seq+weighted_choice(weights,dna) 
    return seq 

def dna_gen2(reps,length,weights,dna): 
    for i in range (reps): 
     print (dna_gen(length)) 

def main(): 
    reps=int(sys.argv[1]) 
    length=int(sys.argv[2]) 
    weights=[float (w) for w in sys.argv[3:6]] 
    dna_gen2(reps,length,weights,dna) 

if __name__=='__main__': 
    main() 
+0

在一個元素中將它們指定爲百分比,然後對其進行分割: 「25,25,25,25」 - > [0.25 0.25 0.25 0.25]。另外,當你解析命令行時,你可以填充'totals'和'running_total',以便每次調用'weighted_choice'時不重複相同的計算。 – LSerni

+0

你應該看看'argparse'庫。它應該做你想做的。 http://docs.python.org/2/howto/argparse.html – chill0r

回答

1

在這裏你去:

#!/usr/bin/env python 

import sys 
import random 

#weights=[.25,.25,.25,.25] 
dna=['A','G','C','T'] 

def weighted_choice(weights,dna): 
    totals = [] 
    running_total = 0 

    for w in weights: 
     running_total += w 
     totals.append(running_total) 

    rnd = random.random() * running_total 
    for i, total in enumerate(totals): 
     if rnd < total: 
      return dna[i] 

def dna_gen(length): 
    seq='' 
    for i in range(length): 
     seq=seq+weighted_choice(weights,dna) 
    return seq 

def dna_gen2(reps,length,weights,dna): 
    for i in range (reps): 
     print (dna_gen(length)) 

if __name__=='__main__': 
    reps = int(sys.argv[1]) 
    length = int(sys.argv[2]) 
    weights = [float (w) for w in sys.argv[3:6]] 
    dna_gen2(reps,length,weights,dna) 

現在,當我嘗試它的命令行:

python nameOfYourScript.py 2 2 0.25 0.25 0.25 0.25 

我得到:

CG 
GA