Этот вопрос дает вам файл 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))````