Я разместил вопрос о cs50 stackexchange, но не получил ответа, я уже неделю застрял на этой задаче ...
Ссылка: https://cs50.stackexchange.com/questions/37281/pset6-dna-loop-miscounts-longest-run-of-str
Но подведем итог ... Мой код должен перебирать последовательность ДНК и подсчитывать самый длинный последовательный прогон короткого тандемного повтора (STR), а затем сравнивать его с данной базой данных, чтобы идентифицировать кому принадлежит эта ДНК.
Прямо сейчас я работаю над подсчетом самого длинного прогона STR, я считаю, что мой лог c верен, но я не могу определить, почему мой код неправильно считает STR большую часть время.
For clarity:
if the expected output is [18, 23, 35, 13, 11, 19, 14, 24]
the actual output is [18, 23, 36, 13, 15, 19, 15, 26]
Материал PSET: https://cdn.cs50.net/2019/fall/psets/6/dna/dna.zip
В основном вы передаете базу данных как 1-й аргумент командной строки, а последовательность ДНК - как 2-й. В случае примера, использованного выше, я использовал large.csv 6.txt
Я слишком долго застрял на этой задаче, и помощь будет очень признательна. Спасибо.
# modules
import sys
import csv
# ensure proper usage
if len(sys.argv) != 3:
print("Usage: python dna.py data.csv sequence.txt")
sys.exit()
database = sys.argv[1]
sequence = sys.argv[2]
run = 0
longrun = 0
STR_Count = []
# open database
with open(database, newline='') as csvfile:
db_reader = csv.reader(csvfile)
# a list of STRs
STR = list(next(db_reader))
STR.pop(0)
# open DNA sequence file
with open(sequence, newline='') as txtfile:
seq_reader = txtfile.read()
# for every STR
for x in range(len(STR)):
# iterate over the entire sequence
for y in range(len(seq_reader)):
# if STR matches sub-string
if STR[x] == seq_reader[y:y + len(STR[x])]:
run += 1
# update index
y = y + len(STR[x])
# if STR no longer matches sub-string
if not STR[x] == seq_reader[y:y + len(STR[x])]:
if run > longrun:
longrun = run
run = 0
STR_Count.append(longrun)
run = 0
longrun = 0
print(STR_Count)