Нахождение длины РНК с учетом определенных условий с использованием Python - PullRequest
1 голос
/ 01 марта 2020

Мне поручено разработать функцию, которая распознает длину кода РНК (исключая стартовый и стоп-кодоны). Функция также должна определять, является ли их код действительным (должен содержать AUG в качестве стартового кодона и UGA, UAA или UAG в конце). Примечание: RNA начинается со стартового кодона AUG и заканчивается UGA, UAA или UAG. Функция должен вернуть «Не читаемый код РНК», если вышеуказанные условия не выполнены.

def rna_length(mrna):
    start_trans = 'AUG'

    end_trans1 = 'UAA'
    end_trans2 = 'UGA'
    end_trans3 = 'UAG'   

    if ((mrna[0:3]!=start_trans) and (mrna [-3:]!=end_trans1 or end_trans2 or end_trans3)):

        return "Not readable RNA code"  

    else:
        (mrna[0:3]==start_trans) and (mrna [-3:]==end_trans1 or end_trans2 or end_trans3)

        length = len(mrna[3:-3]) 

        return length

Но этот код не будет работать для 'AUGAGGCACCUUCUGCUCCUUA C'. Возвращает длину вместо «Не читается»

Ответы [ 2 ]

2 голосов
/ 01 марта 2020

Проблема в условии:

if ((mrna[0:3]!=start_trans) and (mrna [-3:]!=end_trans1 or end_trans2 or end_trans3)):

Вам просто нужно изменить and на or, например:

if ((mrna[0:3]!=start_trans) or (mrna [-3:]!=end_trans1 or end_trans2 or end_trans3)):

Это связано с тот факт, что если код РНК не начинается с «AUG», или , если код не заканчивается на «UAA», «UGA» или «UAG», - это недопустимый код РНК .

полный код:

def rna_length(mrna):
    start_trans = 'AUG'

    end_trans1 = 'UAA'
    end_trans2 = 'UGA'
    end_trans3 = 'UAG'   
    if ((mrna[0:3]!=start_trans) or (mrna [-3:]!=end_trans1 or end_trans2 or 
end_trans3)):

        return "Not readable RNA code"  

    else:
        (mrna[0:3]==start_trans) and (mrna [-3:]==end_trans1 or end_trans2 or 
end_trans3)

        length = len(mrna[3:-3]) 

        return length

 def main():
     print(rna_length("AUGAGGCACCUUCUGCUCCUUAC"))
 if __name__== "__main__":
     main()

выход:

Not readable RNA code
0 голосов
/ 01 марта 2020

Я думаю, что у вас есть ошибка логика c в вашем коде:

В проверке IF вы хотите проверить:

Первые три буквы «AUG»

mrna[0:3] == start_trans

и если последние три буквы - «UAA», «UGA» или «UAG»:

mrna[-3:] == end_trans1 or end_trans2 or end_trans3

Если оба правда, длина должна быть возвращена. Поэтому, если один из них ложный, мы должны получить ошибку.

Итак, если проверка должна быть:

if (mrna[0:3] != start_trans) or (mrna[-3:] != end_trans1 or end_trans2 or end_trans3):

    return "Not readable RNA code"

для еще более короткой проверки IF, мы пишем ее:

end_trans = ['UAA', 'UGA', 'UAG']

if not (mrna[0:3] == start_trans or mrna[-3:] in end_trans):
    return "Not readable RNA code"`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...