Как заставить внутренний цикл учитывать каждую итерацию внешнего цикла? - PullRequest
0 голосов
/ 08 октября 2018

Трехбуквенный набор, состоящий из 'A', 'U', 'G' or 'C', определяется как кодон.Каждый кодон соответствует одному из 20 букв.Набор этих букв (аминокислот) определяется как белок.Файл "codons.txt" содержит кодоны и соответствующие им буквы.

Проблема в следующем: внутренний цикл for работает только один раз - он сравнивает строки из файла txt только с первым кодоном.Затем, как я понимаю, метод пропускает внутренний цикл.

Код:

path = r'C:\Users\...\codons.txt'
f = open(path, 'r')

def prot(DNA):
    protein = ''
    a = True
    for i in range (0, len(DNA)-2,3):
        codon = DNA[i:i+3:1]
        print(codon)
        for line in f:
            if line[0:3:1] == codon:
                protein += line[4:5:1]
                print(protein)
    return protein


prot('AGUCAGGAUAGUCUUA')

Вывод:

 AGU
 S
 CAG
 GAU
 AGU
 CUU

Вопрос следующий: как сделатьработа внутреннего цикла для каждого кодона?

1 Ответ

0 голосов
/ 08 октября 2018

При итерации по файлу (for line in f:) он останавливается при достижении конца файла.

Вы можете либо:

  • сбросить положение считывателя файла наначало файла с помощью f.seek(0)
  • или изменение порядка циклов, так что вы можете выполнить итерацию по файлу только один раз.

    def prot(DNA):
        protein = ''
    
        with open(path, 'r') as f:
            for line in f:
                for i in range (0, len(DNA)-2,3):
                    codon = DNA[i:i+3:1]
                    print(codon)
    
                        if line[0:3:1] == codon:
                            protein += line[4:5:1]
                            print(protein)
    
        return protein
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...