2015-04-29 2 views
1

Программа, которую мне нужно было сделать, читает текстовый файл с тремя строками выровненных последовательностей 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 

Прошу прощения, если это не слишком ясно.

Таким образом, вопрос заключается в следующем:

Как я могу изменить свою программу, так что я получаю число «х» результатов? Скажем, я хотел 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»? Я поменял их в своей программе, и в любом случае все работает нормально. –

Смежные вопросы