I've been stuck on this question for a week. After countless hours of debugs, I decided to post it here. Please refer to images and code snippets below and kindly explain to me what might be the problem here.
from sys import argv
import csv
from csv import reader
def get_max_str_repeats(sequence, dna_str):
count = 0
max_reps = 0
i = 0
while i + len(dna_str) < len(sequence):
if sequence[i:i+(len(dna_str))] == dna_str:
#print(sequence[i:i+(len(dna_str))])
i += len(dna_str)
count += 1
if i + len(dna_str) > len(sequence):
max_reps = count
else:
if max_reps < count:
max_reps = count
count = 0
i += 1
#print(f"\t STR: {dna_str} | Max Rep: {max_reps}")
return max_reps # Lavender sequence 5 GAAA returns 48 but should be 47 TCTG should return 41 returns 43
if len(argv) != 3:
print("Program usage: dna.py csvfile.csv textfile.txt")
exit(1)
list_of_names = []
with open(argv[1], "r") as file: # for assigning read csv values to dictionary
readerr = csv.DictReader(file)
for row in readerr:
list_of_names.append(row)
with open(argv[1], 'r') as header_of_file: # to read nucleotides from header
csv_reader = reader(header_of_file)
header = next(csv_reader)
dna_strs = []
for columns in header[1:]: # column names (dna strs) except "name" column
dna_strs.append(columns)
with open(argv[2], "r") as f:
sequence = str(f.read())
for person in list_of_names:
nucleotide_match_count = 0
for dna_str in dna_strs:
#print(person, end="")
if get_max_str_repeats(sequence, dna_str) == int(person[dna_str]):
nucleotide_match_count += 1
if nucleotide_match_count == len(dna_strs):
print(person["name"])
exit(0)
print("No match")