所以,我正在尝试制作一个python程序,接收像
这样的DNA序列ATAAAAAGCGTAAGCATTGGCATCATTTGCAGCATACTCAAGCCATTTTTCAGCCAGCTCGGGCTCTTTTGTATATTTCGAGGCAACCCAGCCCTTCCCGCCAGCAAAAGGGGCGTATTCTTCTCCATTTGGCAATGTCGGAATGG
作为输入,我需要它来识别序列中的模式,比如"GGCAT"我需要程序返回"GGCAT has been found (so many times) in the sequence"我试着
print ("Pattern recognition system.")
option=input("Insert DNA sequence")
def PatternCount(Text, Pattern):
count=0
for i in range(0, len(text)-len(pattern)+1):
if text[i:len(pattern+i)]== pattern:
count=count+1
return count
,但我不认为这是这样做的方式,看到它在以前的帖子,但我得到的错误代码多个语句发现,而单个语句史密斯。有什么好主意吗?
这样如何:
- 使用
str.find()
方法查找字符串 中的模式 - 使用
str.replace(Pattern, '', 1)
方法将模式的第一次出现替换为空字符串,(传递1作为计数使其仅替换第一次出现) - 在一个while循环中保持这样做,直到
find()
返回-1并每次增加count
。
代码:
def PatternCount(Text, Pattern):
count = 0
while Text.find(Pattern) != -1:
count = count + 1
Text = Text.replace(Pattern, '', 1)
return count
在你的函数中,
我可以看到
- 要传递的参数的名称Text,与text中使用的字符不匹配。,。
- 在你的
if
条件len(pattern+i)
语法不正确。As pattern是一个字符串,i是一个整数。应该是len(pattern)+i
Please try this:
input_sequence = "ATAAAAAGCGTAAGCATTGGCATCATTTGCAGCATACTCAAGCCATTTTTCAGCCAGCTCGGGCTCTTTTGTATATTTCGAGGCAACCCAGCCCTTCCCGCCAGCAAAAGGGGCGTATTCTTCTCCATTTGGCAATGTCGGAATGG"
input_pattern = "GGCAT"
def PatternCount(sequence, pattern):
count=0
length_of_pattern = len(pattern)
range_to_iterate = len(sequence)-length_of_pattern
for i in range(0, range_to_iterate+1):
if sequence[i:i+length_of_pattern]==pattern:
count+=1
return count
print (PatternCount(input_sequence, input_pattern))