У меня проблемы с ДНК CS50 pset6. Он получает все правильные значения и дает правильные ответы, когда я использую файл small.csv
, но не когда я использую большой файл. Я работал с debug50 уже более недели и не могу понять проблему. Я предполагаю, что проблема заключается в том, что где-то в l oop через образцы, чтобы найти STRS, но я просто не вижу, что он делает неправильно при прохождении через него.
Если вы не знакомы с набором проблем CS50 DNA предполагается, что код просматривает последовательность днк (argv[1]
) и сравнивает ее с CSV-файлом, содержащим STR ДНК людей, чтобы выяснить, к какому человеку (если он есть) он принадлежит.
Примечание; Мой код не работает внутри корпуса; (Python dna.py database / large.csv sequence / 5.txt), если это поможет.
from sys import argv
from csv import reader
#ensures correct number of arguments
if (len(argv) != 3):
print("usage: python dna.py data sample")
#dict for storage
peps = {}
#storage for strands we look for.
types = []
#opens csv table
with open(argv[1],'r') as file:
data = reader(file)
line = 0
number = 0
for l in data:
if line == 0:
for col in l:
if col[2].islower() and col != 'name':
break
if col == 'name':
continue
else:
types.append(col)
line += 1
else:
row_mark = 0
for col in l:
if row_mark == 0:
peps[col] = []
row_mark += 1
else:
peps[l[0]].append(col)
#convert sample to string
samples = ""
with open(argv[2], 'r') as sample:
for c in sample:
samples = samples + c
#DNA STR GROUPS
dna = { "AGATC" : 0,
"AATG" : 0,
"TATC" : 0,
"TTTTTTCT" : 0,
"TCTAG" : 0,
"GATA" : 0,
"GAAA" : 0,
"TCTG" : 0 }
#go through all the strs in dna
for keys in dna:
#the longest run of sequnace
longest = 0
#the current run of sequances
run = 0
size = len(keys)
#look through sample for longest
i = 0
while i < len(samples):
hold = samples[i:(i + size)]
if hold == keys:
run += 1
#ensure the code does not go outside len of samples
if ((i + size) < len(samples)):
i = i + size
continue
if run > longest:
longest = run
run = 0
i += 1
dna[keys] = longest
#see who it is
positive = True
person = ''
for key in peps:
positive = True
for entry in types:
x = types.index(entry)
test = dna.get(entry)
can = int(peps.get(key)[x])
if (test != can):
positive = False
if positive == True:
person = key
break
if person != '':
print(person)
else:
print("No match")