import csv
import sys
def main():
# TODO: Check for command-line usage
database_entry = sys.argv[1]
# database_entry = 'databases/small.csv'
dna_entry = sys.argv[2]
# dna_entry = 'sequences/4.txt'
# TODO: Read database file into a variable
with open(database_entry, "r") as database:
reader = csv.reader(database)
sequences = next(reader)[1:]
# TODO: Read DNA sequence file into a variable
dna = open(dna_entry, "r")
# TODO: Find longest match of each STR in DNA sequence
# for i in range(len(sequences)):
# print(sequences[i] + ": " + str(longest_match(dna.read(), sequences[i])))
print(longest_match(dna.read(), sequences[2]))
print(longest_match(dna.read(), sequences[2]))
# TODO: Check database for matching profiles
return
def longest_match(sequence, subsequence):
"""Returns length of longest run of subsequence in sequence."""
# Initialize variables
longest_run = 0
subsequence_length = len(subsequence)
sequence_length = len(sequence)
# Check each character in sequence for most consecutive runs of subsequence
for i in range(sequence_length):
# Initialize count of consecutive runs
count = 0
# Check for a subsequence match in a "substring" (a subset of characters) within sequence
# If a match, move substring to next potential match in sequence
# Continue moving substring and checking for matches until out of consecutive matches
while True:
# Adjust substring start and end
start = i + count * subsequence_length
end = start + subsequence_length
# If there is a match in the substring
if sequence[start:end] == subsequence:
count += 1
# If there is no match in the substring
else:
break
# Update most consecutive matches found
longest_run = max(longest_run, count)
# After checking for runs at each character in seqeuence, return longest run found
return longest_run
main()
RESULT:
$ python dna.py databases/large.csv sequences/6.txt
35
0
When same function is called twice with same arguments, why do I get different results?