Python Splicing Python (Нет данных) - PullRequest
0 голосов
/ 17 мая 2018

Я работал над упражнениями Розалинд для цитадели биоинформатики по сплайсингу РНК .В настоящее время я использую версию Python 3.6.Он не сказал мне, что в моем коде есть какая-либо ошибка, поэтому я предполагаю, что мой код в порядке.Тем не менее, не выводится никаких данных, не выдается предупреждение об ошибке или что-либо еще.Ниже приведен мой код:

 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))

Это содержимое в текстовом файле rosalind_splc.txt:

>Rosalind_3363
ATGGGGCTGAGCCCATGTCTAAATGATATCTTGGTGCATTGCAATCTAACTATTTTTTCG
CAACCATGTTCCATCTGGCGCAAAATGGGCGTGTAGGGAGCTTCGCTATAGTCACTGAAG
AACATTCGCAACTTACAGCTCTCGAGAGGGTACAGCTGGACGGTGTTTGTTTGGTCTAAG
TCTGAGTCCAAAGTCGTTGAATGTCGAGCTAGGTTGACGTCATTCTTCGAGTTACGTCTT
CATTGATTCGCGGCGGCCGCCAGCATTTGATTGTACACATCCGACGTCTTTGGCAATCTA
CATAATTATATTGAGAGGGGCGCCATTACTCGAACCCATAACAAACAACTGTCCGTTTAC
AAGGTTATATTATCATGACCTAATGGTTGAGCTACGGAGTGGGGGGCCCTCGGCTACAGG
TGTTAAACTATCCTGCGGATGCGGATCTTAGCCCGATTTGCATGGCCCAGTAAGGCGCTG
ATTGTAAACCGCCTAGCATACATGTGCTTCTTACTCCAGGGTCCATTGCTACCAGTTCGC
TTCTGACGCCTCAATTGTACCTTCCTTTTTTGAATGGCAACCTGCAATAGCAGTCGACTG
ATGGGGCGTTACAGTATGAAGGCTATATTTACATTATCTCTAAACACACTGCTACCGCGA
AACCCCAACTCGGACCGGTCAGAGCGCTCGTGCTTTGTTCTTGGTCGCTAGCGACCAACA
GTGGATAGGTGGGCGCGGGCCTTGCACCTCCTAGAGCATCACGTGGAGTGGATGCAAACA
GTCTATGGTCCCCCGCTTCGGCTCACGGGTAACGTCTCTTGTGGTACTAGACCATAGGCA
TCCAGGTGAGGGCTACATCCGTATTTAATGAAACTGAGTTCCTCCAAAGCTCCTCGGGAC
GCAGGCAGGTTCATCCGCAGTCAGTAAGGGAGGGAAGAGCTTTCCCCGTTCCACCCAGAT
GCCCTGTGCACGGGAGAGAGATCCAGGTGGTAG
>Rosalind_0423
TCGCAACTTACAGCTCTCGAGAGGG
>Rosalind_5768
GCCCAGTAAGGCGCTGATTGTAAACCGCCTAGCATACAT
>Rosalind_6780
GTCTTCATTGATTCGCGGCGGCCGCCAGCA
>Rosalind_6441
GCAAACAGTCT
>Rosalind_3315
TTGGTCGCTAGCGACCAACAGTGGATAGGTGGGCGCGGGCCTTGCACCT
>Rosalind_7467
TTATCTCTAAACACACTGC
>Rosalind_3159
CGCAGTCAGTAAGGGAGG
>Rosalind_6420
TCTAAGTCTGAGTCCAAAGTCGTTGAATGTCGAGCTAGGTTGACGT
>Rosalind_8344
GGGGCGCCATTACTCGAACCCATAACAAACAACT
>Rosalind_2993
CCAGGTGAGGGCTACATCCGTAT
>Rosalind_0536
ATTATCATGACCTAATG
>Rosalind_3774
TCGCAACCATGTTCCAT
>Rosalind_7168
GGGCCCTCGGCTACAGGTGTTAAACTAT
>Rosalind_8059
CAATTGTACCTTCCTTTTTTGAATG

Поскольку данные не указаны, я хотел бы знать, какая часть моегокод должен быть исправлен, чтобы вывод вышел.Спасибо.

1 Ответ

0 голосов
/ 18 мая 2018

Чтобы понять, какую часть вашего кода вам нужно изменить, это помогает понять, что не так в вашем коде.Если у вас есть редактор кода с отладчиком, он помогает пошагово выполнить код.Если у вас его нет, вы можете использовать онлайн-инструмент http://pythontutor.com. Вот прямая ссылка на ваш код с первыми несколькими строками ввода .

Нажмитена кнопку вперед под кодом.На шаге 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 будет содержать последовательность ДНК.Но он содержит заголовок последовательности файла FASTA .Точно так же интроны должны содержать только последовательности ДНК, но здесь они также содержат заголовки последовательностей FASTA (>Rosalind_0423, >Rosalind_5768).

То, что происходит в следующих строках, больше не имеет смысла для данных, которые у вас есть сейчас.

В строках

for intron in introns:
    dna = dna.replace(intron, '')

, которые вы хотите удалитьинтроны из ДНК, но dna не содержит строку последовательности ДНК, а introns содержит иные вещи, чем подстроки dna.Таким образом, после этого цикла dna по-прежнему равняется >Rosalind_3363.Ни одна из трехбуквенных последовательностей dna (>Ro, sal, ind, ...) не является действительными кодонами, поэтому они не найдены в DNA_CODON_TABLE.И, следовательно, result() возвращает пустую строку.

Теперь я думаю о том, что произошло.Вы подняли дословно код из Интернета ( он точно равен коду здесь ), не понимая, что он делает, и не понимая, что первоначальный автор уже предварительно обработал входные данные.

ИтакЧто нужно сделать, чтобы исправить код?

  • парсит файл FASTA, например, используя Bio.SeqIO.parse()
  • При необходимости объединить ДНКстроки первой последовательности.Это то, что должно заканчиваться в вашей переменной dna
  • . Следующие строки последовательности должны заканчиваться вашей переменной introns.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...