Как определить функцию проверки подстрок ДНК? - PullRequest
1 голос
/ 11 октября 2019

Я должен написать функцию python 3, которая принимает три аргумента - две строки сегмента ДНК, затем 3-базовый мотив и возвращает True, если оба сегмента ДНК содержат мотив, и False в противном случае. Я написал функцию, однако она возвращает True или False и None ... Почему? Может кто-нибудь сказать мне, что здесь не так?

def common_motif(dna_seq1, dna_seq2, x):
    """This function returns True if both DNA segments contain the motif, and False otherwise"""
    count_1 = dna_seq1.count(x) 
    count_2 = dna_seq2.count(x)
    if count_1 > 0:
        if count_2 > 0:
            print(True)
    else:
        print(False)

print(common_motif("GATGCGCACGCG", "ATGGATTACCAT", "GAT"))
True 
None 

1 Ответ

2 голосов
/ 11 октября 2019

Он печатает True или False как побочный эффект , и он возвращает None. В общем, мы хотели бы написать функции, которые не имеют побочных эффектов (так называемые «чистые» функции), и вместо этого вернуть из них все, что нам нужно. (За исключением отладки: мы печатаем вещи изнутри функций все время во время отладки.)

Вы, вероятно, захотите сделать это:

def common_motif(dna_seq1, dna_seq2, x):
    """This function is stupid """
    count_1 = dna_seq1.count(x) 
    count_2 = dna_seq2.count(x)
    if count_1 > 0:
        if count_2 > 0:
            return True
    else:
        return False

Обратите внимание, что это все еще может вернуть None,например, если count_1 > 0 и count_2 < 0. Python-функции, которые не имеют явного return, просто возвращают None.

В зависимости от желаемой логики, вы можете охватить эту возможность и немного упростить вещи:

def common_motif(dna_seq1, dna_seq2, x):
    """This function is stupid """
    count_1 = dna_seq1.count(x) 
    count_2 = dna_seq2.count(x)
    return (count_1 > 0) and (count_2 > 0)

Возвращает True, если эти два условия выполнены, и False в противном случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...