我一直致力于Rosalind exercises for Bioinformatics stronghold on RNA Splicing。我目前正在使用Python 3.6版本。它没有告诉我我的代码中有任何错误,所以我假设我的代码没问题。但是,没有产生输出,没有错误警告或任何。以下是我的代码:
user.confirmation_token?
这是rosalind_splc.txt文本文件中的内容:
DNA_CODON_TABLE = {
'TTT': 'F', 'CTT': 'L', 'ATT': 'I', 'GTT': 'V',
'TTC': 'F', 'CTC': 'L', 'ATC': 'I', 'GTC': 'V',
'TTA': 'L', 'CTA': 'L', 'ATA': 'I', 'GTA': 'V',
'TTG': 'L', 'CTG': 'L', 'ATG': 'M', 'GTG': 'V',
'TCT': 'S', 'CCT': 'P', 'ACT': 'T', 'GCT': 'A',
'TCC': 'S', 'CCC': 'P', 'ACC': 'T', 'GCC': 'A',
'TCA': 'S', 'CCA': 'P', 'ACA': 'T', 'GCA': 'A',
'TCG': 'S', 'CCG': 'P', 'ACG': 'T', 'GCG': 'A',
'TAT': 'Y', 'CAT': 'H', 'AAT': 'N', 'GAT': 'D',
'TAC': 'Y', 'CAC': 'H', 'AAC': 'N', 'GAC': 'D',
'TAA': '-', 'CAA': 'Q', 'AAA': 'K', 'GAA': 'E',
'TAG': '-', 'CAG': 'Q', 'AAG': 'K', 'GAG': 'E',
'TGT': 'C', 'CGT': 'R', 'AGT': 'S', 'GGT': 'G',
'TGC': 'C', 'CGC': 'R', 'AGC': 'S', 'GGC': 'G',
'TGA': '-', 'CGA': 'R', 'AGA': 'R', 'GGA': 'G',
'TGG': 'W', 'CGG': 'R', 'AGG': 'R', 'GGG': 'G'
}
def result(s):
result = ''
lines = s.split()
dna = lines[0]
introns = lines[1:]
for intron in introns:
dna = dna.replace(intron, '')
for i in range(0, len(dna), 3):
codon = dna[i:i+3]
protein = None
if codon in DNA_CODON_TABLE:
protein = DNA_CODON_TABLE[codon]
if protein == '-':
break
if protein:
result += protein
return ''.join(list(result))
if __name__ == "__main__":
"""small_dataset = ' '"""
large_dataset = open('rosalind_splc.txt').read().strip()
print (result(large_dataset))
由于没有给出输出,我想知道我的代码的哪一部分需要修复才能输出。感谢。
答案 0 :(得分:3)
要了解需要更改代码的哪一部分,有助于了解代码中出现的问题。如果您有一个带调试器的代码编辑器,则有助于逐步完成代码。如果您没有,可以使用在线工具http://pythontutor.com。这是direct link to your code with the first few lines of your input。
单击代码下的前进按钮。在第20步,您将跳转到函数result()
。在步骤24之后,您的输入将在换行符上拆分。您可以看到lines
现在是:
lines = ['>Rosalind_3363',
'ATGGGGCTGAGCCCATGTCTAAATGATATCTTGGTGCATTGCAATCTAACTATTTTTTCG',
'CAACCATGTTCCATCTGGCGCAAAATGGGCGTGTAGGGAGCTTCGCTATAGTCACTGAAG',
'>Rosalind_0423',
'TCGCAACTTACAGCTCTCGAGAGGG',
'>Rosalind_5768',
'GCCCAGTAAGGCGCTGATTGTAAACCGCCTAGCATACAT']
在步骤25中,您将lines
的第一项分配给变量dna
。因此dna
现在等于>Rosalind_3363
。在下一步中,将列表中的其余项目分配给变量introns
。所以我们现在有了
dna = '>Rosalind_3363'
introns = ['ATGGGGCTGAGCCCATGTCTAAATGATATCTTGGTGCATTGCAATCTAACTATTTTTTCG',
'CAACCATGTTCCATCTGGCGCAAAATGGGCGTGTAGGGAGCTTCGCTATAGTCACTGAAG',
'>Rosalind_0423',
'TCGCAACTTACAGCTCTCGAGAGGG',
'>Rosalind_5768',
'GCCCAGTAAGGCGCTGATTGTAAACCGCCTAGCATACAT']
这里出现问题的最初迹象已经很明显。您可能希望dna
包含DNA序列。但它包含FASTA file的序列标题。同样,内含子也应该只包含DNA序列,但在这里它们也包含FASTA序列标题(>Rosalind_0423
,>Rosalind_5768
)。
所以在下一行中发生的事情对你现在拥有的数据不再有任何意义。
在行
for intron in introns:
dna = dna.replace(intron, '')
您想要从DNA中删除内含子,但dna
不包含DNA序列字符串,introns
包含除dna
的子字符串以外的其他内容。因此,在此循环之后,dna
仍然等于>Rosalind_3363
。 dna
(>Ro
,sal
,ind
,......)的三个字母序列都不是有效密码子,因此DNA_CODON_TABLE
中找不到它们。因此,result()
返回一个空字符串。
现在我猜测发生了什么。您从互联网(it is exactly equal to the code here)逐字提取代码而不了解它的作用,并且没有意识到原作者已经预处理了输入数据。
那么,您需要做些什么来修复代码?
Bio.SeqIO.parse()
dna
变量introns
变量中结束。