【问题标题】:How to define a function checking DNA substrings?如何定义一个检查 DNA 子串的函数?
【发布时间】:2019-10-11 13:51:44
【问题描述】:

我应该编写一个 python 3 函数,它接受三个参数 - 两个 DNA 片段字符串,然后是一个 3 碱基基序,如果两个 DNA 片段都包含该基序,则返回 True,否则返回 False。 我已经编写了函数,但是它返回 True 或 False AND 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 

【问题讨论】:

  • 您正在打印common_motif 的结果(common_motif 返回的对象)。由于该函数没有显式返回任何内容,因此默认返回None。因此,您正在打印None。您还可以打印 True 或 False 作为调用函数的副作用。

标签: python function substring


【解决方案1】:

它将True 或False 打印为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 > 0 和count_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。

【讨论】:

  • 太棒了,谢谢!
  • @lena np,如果对您有帮助,请不要忘记接受或投票:)
猜你喜欢
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 2020-06-30
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多