如何定义检查DNA子字符串的函数?

2024-06-14 09:29:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我应该编写一个python 3函数,它接受三个参数——两个DNA片段字符串,然后是一个3-基模体,如果两个DNA片段都包含模体,则返回True,否则返回False。 我已经写了这个函数,但是它返回True或False并且没有。。。为什么? 谁能告诉我这里怎么了

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 

Tags: 函数字符串falsetrue参数ifcountcommon
1条回答
网友
1楼 · 发布于 2024-06-14 09:29:48

它将TrueFalse打印为side-effect,并返回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 > 0count_2 < 0。没有显式return的Python函数只返回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

相关问题 更多 >