Проблема Розалинд: консенсус и профиль.Получил правильный код и правильный формат.Не давая мне правильный ответ - PullRequest
0 голосов
/ 07 февраля 2019

Этот вопрос дает вам файл FASTA, состоящий из нескольких строк ДНК, таких как:

>Rosalind_1
ATCCAGCT
>Rosalind_2
GGGCAACT
>Rosalind_3
ATGGATCT
>Rosalind_4
AAGCAACC
>Rosalind_5
TTGGAACT
>Rosalind_6
ATGCCATT
>Rosalind_7
ATGGCACT

и просит вернуть матрицу «профиля», которая учитывает появление нуклеотида в каждом столбценаряду со строкой, состоящей из наиболее часто встречающегося нуклеотида в каждом столбце матрицы профиля.

ATGCAACT
A: 5 1 0 0 5 5 0 0
C: 0 0 1 4 2 0 6 1
G: 1 1 6 3 0 1 0 0
T: 1 5 0 0 0 1 1 6

Я почти уверен, что я правильно понял и код, и формат, однако Розалинда продолжает говорить неправильноответ.Но это могут быть некоторые тонкие вещи, которые я не уловил?Заранее спасибо!Ниже мой код:

#READING FASTA Files
file=open('/Users/vivianspro/Downloads/rosalind_cons (5).txt', 'r')
line=file.readline()
strings = []
sequence=''
while line:
    #line=line.rstrip('\n')
    line = line.strip() #empty () automatically strips the \n
    if '>' in line:
        if sequence != "":
            strings.append(sequence)
            sequence = ""
        #sequence=line
    else:
        sequence+=line
    line=file.readline()

for s in strings:
    print(s)

Motifs = []
for seq in strings:
    Motifs.append(list(seq))

#make every symbol into an element in the list separated by ,
for s in Motifs:
    print(s)
def Count(Motifs):
    count = {} # initializing the count dictionary
    col = len( Motifs[0] ) #length of each string, so 6
    for symbol in "ACGT":
        count[symbol] = []
        for j in range( col ):
            count[symbol].append( 0 )
    row=len(Motifs) #number of lists, aka number of rows in Motifs, so 5
    for i in range(row):
        for j in range(col):
            symbol = Motifs[i][j]
            count[symbol][j] += 1
    return count

def Consensus(Motifs):
    col = len(Motifs[0])
    count = Count(Motifs)
    consensus = ""
    for j in range(col):
        m = 0
        frequentSymbol = ""
        for symbol in "ACGT":
            if count[symbol][j] > m:
                m = count[symbol][j]
                frequentSymbol = symbol
        consensus += frequentSymbol
    return consensus

print(Consensus(Motifs))
for k, v in Count(Motifs).items():
    print (k + ": " + " ".join(str(x) for x in v))````





...