该项目的目标是打开和读取文本文件中的DNA序列,例如,如果子字符串是AGATC,那么连续的子字符串也要添加到计数器中,字符串不再是AGATC,其目的是将其汇总到该范围内的最高分,清除计数器并继续搜索以找到最长的连续序列。
str_count = []
counter = 0
highest = 0
# read sequence
with open(argv[2], "r") as seq:
seqRead = seq.read()
for i in range(len(seqRead)):
#search for consecutive AGATC
if i == 'A' and seqRead[i:i+6] == 'AGATC':
while i == 'A' and seqRead[i:i+6] == 'AGATC':
counter += 1
i = i + 5
if highest < counter:
highest = counter
counter = 0
else:
counter = 0
现在,我认为我遇到的问题是我认为我没有正确比较文本序列,因此无法读取字符串中字母的正确序列。
我的目标是将“ i”作为“ A”进行跟踪,然后提取连续的4个字母并将其与“ AGATC”进行比较,如果匹配则增加计数器并将“ i”更改为比较后的字母,并且如果是A,则重复直到不再连续,然后加到最高点直到结束。 这是最不正确的,但是在运行调试器时,我注意到它从未输入第一个if语句,这使我相信我比较的方式是错误的。
样本输入:
AGATCAGATCAGATCAGATCAGATCDJFDHFDTTTTCCSSDDSDDGFJFHAGATCAGATCAGATCAGATCAGATCAGATGJFHJGHJDSHGDKFSAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCDKFDKDFKGJKDFKAGATCkFGJKFDDAGATCDFKJKFJFKDJKAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCKFDHDFKFDHKGHKDFGJFKHDFK
预期输出:最高= 30
由于AGATC的最长连续出现是30个。
输入:
AAGGTAAGTTTAGAATATAAAAGGTGAGTTAAATAGAATAGGTTAAAATTAAAGGAGATCAGATCAGATCAGATCTATCTATCTATCTATCTATCAGAAAAGAGTAAATAGTTAAAGAGTAAGATATTGAATTAATGGAAAATATTGTTGGGGAAAGGAGGGATAGAAGG
输出:最高= 4
我误会了如何使用seqRead [i:i + 6]吗?
我该如何做得更好?
答案 0 :(得分:0)
您的子字符串太长,seqRead[i:i+6]
将给出一个长度为6个字符而不是5个字符的字符串。该行(以及进行类似比较的另一行)应改为seqRead[i:i+5]
。另外,当我认为您打算在i
中的迭代器的 position 处比较字母时,您尝试将迭代器(seqRead
)与字母进行比较。 i == 'A'
应更改为seqRead[i] == 'A'
:
str_count = []
counter = 0
highest = 0
# read sequence
with open(argv[2], "r") as seq:
seqRead = seq.read()
for i in range(len(seqRead)):
#search for consecutive AGATC
if seqRead[i] == 'A' and seqRead[i:i+5] == 'AGATC':
while seqRead[i] == 'A' and seqRead[i:i+5] == 'AGATC':
counter += 1
i = i + 5
if highest < counter:
highest = counter
counter = 0
else:
counter = 0
答案 1 :(得分:0)
在if
循环之前的代码while
中是多余的。而且您要分割不正确的子字符串,这是更新和简化的代码:
for i in range(len(seqRead)):
while seqRead[i:i+5] == "AGATC":
counter += 1
i += 5
if counter > highest:
highest = counter
counter = 0