1

我编写了一些代码,可以输出指定长度、副本数、指定概率等的 dna 序列。在 IDLE 中,程序可以正常工作,因为我预设了我想要的概率。我希望这个程序能够从命令行有效地运行。

我怎样才能让我的概率(权重)作为命令行参数运行,就像我对长度和副本数量所做的那样?我不知道如何将概率作为参数合并到命令行中。谢谢你的帮助!这是代码:

#!/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()
4

1 回答 1

0

干得好:

#!/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
于 2014-03-25T13:59:03.203 回答