2015-04-29 49 views
1

我需要的程序用3行对齐的dna序列(每个长度为'n')读取一个文本文件,并打印出长度为'n'的随机列。Python-如何每次重复循环获得新结果?

The alignment text

如果您不想点击的东西,它本质上是这样的:

AGAACGC 
AACCTAG 
AGCTCAC 

这是我的计划:

import random 

file = open('3seq.txt', 'r') 

seq1 = file.readline().strip() 
seq2 = file.readline().strip() 
seq3 = file.readline().strip() 

length = len(seq1) 


rand1 = '' 
rand2 = '' 
rand3 = '' 

for blah in range(length): 
    x = random.randrange(length) 
    rand1 += seq1[x] 
    rand2 += seq2[x] 
    rand3 += seq3[x] 
print rand1 
print rand2 
print rand3 

结果会是这样的:

ACAGGAA 
ATAAACA 
ACAAGTA 

如果不太清楚,我很抱歉。

所以,问题是这样的:

我怎样才能改变我的计划,使我得到“x”的结果数量?说我想3个结果:

ACAGGAA 
ATAAACA 
ACAAGTA 

AGCCCAA 
CAGGGAC 
CACCCAC 

CGACGCA 
TAAGATC 
CAACGCC 

我得到我想要的答案......我只是想要更多的它打印出来。

任何帮助?

+0

封装当前的脚本功能,并称之为'内循环3'倍。 – ZdaR

+1

似乎有点类似[这个问题](http://stackoverflow.com/questions/29932251/generating-random-string-from-a-different-string-in-python)。同学? – TigerhawkT3

回答

0

清理代码一点点,对于指定的工作创造一个功能,它看起来是这样的:

import random 
sequence = open('3seq.txt', 'r') 
seq1, seq2, seq3 = sequence.readlines() 
sequence.close() 

x = 3 

def get_random(seq1, seq2, seq3): 
    length = len(seq1) 

    rand1 = '' 
    rand2 = '' 
    rand3 = '' 

    for i in range(length): 
     x = random.randrange(length) 
     rand1 += seq1[x] 
     rand2 += seq2[x] 
     rand3 += seq3[x] 
    print rand1 
    print rand2 
    print rand3 
    print 

for j in xrange(x): # 'x' being defined at the top. 
    get_random(seq1, seq2, seq3) 
+0

非常感谢!这清除了如何使用功能相当不错。 –

+0

非常高兴能够帮助您,您还可以通过提高答案并用绿色标记标记它,如果这真的满足您的问题,也可以表示赞赏。谢谢。 – ZdaR

+0

还有一个小问题。是否有理由使用'xrange'而不是'range'?我在我的程序中将它们互换,并且在任何情况下似乎仍然可以正常工作。 –

相关问题