0

我已经编写了这个函数,但它并没有像我想要的那样运行。请问有什么想法吗?我知道问题出在char定义上......

def count_nucleotides(dna, nucleotide):
    ''' (str, str) -> int

    Return the number of occurrences of nucleotide in the DNA sequence dna.

    >>> count_nucleotides('ATCGGC', 'G')
    2
    >>> count_nucleotides('ATCTA', 'G')
    0
    '''

    num_nucleodites=0

    for char in dna:
        if char is ('A'or'T'or'C'or'G'):
            num_nucleodites=num_nucleodites + 1      
    return num_nucleodites
4

5 回答 5

3

刚刚呢

def count_nucleotides(dna, nucleotide):
    return dna.count(nucleotide)

(请注意,就家庭作业而言,这可能不会飞......)

于 2012-10-20T04:46:47.007 回答
2

根据您的一条评论,您似乎正在寻找一个以上核苷酸的重叠序列。这可以通过正则表达式来完成:

import re
def find_overlapping(needle, haystack):
    return len(re.findall("(?=" + needle + ")", haystack))

然后你可以像这样使用它:

>>> find_overlapping("AGA", "AGAGAGAAGAGAG")
5
于 2012-10-20T05:04:23.327 回答
0

你写的or条件不像你想的那样工作..它应该检查char它们中的每一个,然后用or它们来分隔它们,如下所示: -

if char is 'A' or char is 'T' ... so on:

但是,您可以使用in运算符来使用更好的方法。

尝试这个: -

for char in dna:
        if char in 'ATCG':
            num_nucleodites=num_nucleodites + 1 

但是,由于您在您的文章question中说您只想要一个特定元素的计数,因此您不需要检查每个 char 和所有 4 个字符。这是您的代码使用基本 for 循环的样子:-

def count_nucleotides(dna, nucleotide):
    num_nucleotide = 0
    for char in dna:
        if char == nucleotide:
            num_nucleotide = num_nucletode + 1
    return num_nucleotide

要不就: -

def count_nucleotides(dna, nucleotide):
    return dna.count(nucleotide)
于 2012-10-20T04:43:56.140 回答
0
string = "ATAGTTCATGTACCGTTGCAGGGGG"
print [(i,string.count(i)) for i in list("ACTG")]
于 2014-09-26T17:43:12.240 回答
0
if char is ('A'or'T'or'C'or'G'):

这是评估'A' or 'T'哪个返回'A',然后检查是否char等于它 - 在 Python REPL 中尝试它:

>>> ('A'or'T'or'C'or'G')
'A'

我想你的意思是:

if char in ('A', 'T', 'C', 'G'):
于 2012-10-20T04:54:33.470 回答