我写过这个函数,它不能按照我的意愿运行。有什么想法吗? 我理解问题是以某种方式对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
答案 0 :(得分:3)
怎么样只是
def count_nucleotides(dna, nucleotide):
return dna.count(nucleotide)
(请注意,就家庭作业而言,这可能不会飞......)
答案 1 :(得分:2)
根据你的一条评论,似乎你正在寻找一个以上核苷酸的重叠序列。这可以使用正则表达式完成:
import re
def find_overlapping(needle, haystack):
return len(re.findall("(?=" + needle + ")", haystack))
然后您可以像这样使用它:
>>> find_overlapping("AGA", "AGAGAGAAGAGAG")
5
答案 2 :(得分: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
中说过你只想要一个特定元素的计数,你就不需要用所有4个字符来检查每个字符..这就是你的代码应该如何使用basic -loop: -
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)
答案 3 :(得分:0)
if char is ('A'or'T'or'C'or'G'):
即评估返回'A'的'A' or 'T'
,然后检查char
是否等于它 - 在Python REPL中尝试:
>>> ('A'or'T'or'C'or'G')
'A'
我认为你打算做的是:
if char in ('A', 'T', 'C', 'G'):
答案 4 :(得分:0)
string = "ATAGTTCATGTACCGTTGCAGGGGG"
print [(i,string.count(i)) for i in list("ACTG")]