Проблема сравнений в ДНК (cs50 PS6) [закрыто]Python

Программы на Python
Ответить
Anonymous
 Проблема сравнений в ДНК (cs50 PS6) [закрыто]

Сообщение Anonymous »

Я работаю над задачей ДНК CS50, где вы читаете базу данных CSV людей и их счетчики STR, вычисляете самые длинные последовательные повторы каждого STR в заданной последовательности ДНК, а затем сравниваете эти счетчики с каждой строкой в ​​базе данных, чтобы найти совпадение.
Мой код правильно вычисляет словарь результатов (самый длинный пробег STR для входной последовательности). Но когда я сравниваю результаты с каждой строкой в CSV, я получаю запутанный результат и не могу понять, почему.
Вот что происходит:
Перед сравнением я печатаю значения из обоих словарей для каждой подпоследовательности.
Но программа печатает одно и то же значение строки[...] несколько раз (например, строка Алисы печатается 3 раза, строка Боба 2 раза, Чарли один раз), даже когда я меняю входной файл или последовательность ДНК.
Числа, напечатанные под строками «Строка:» и «Результаты:», должны представлять значения STR из строки CSV и из моих вычисленных результатов, но я не понимаю, почему одни и те же значения появляются несколько раз или почему выходные данные повторяются по этому конкретному шаблону.
Сравнение всегда терпит неудачу, даже если значения кажутся совпадающими.
Неожиданное поведение следующее:
Одни и те же значения строк печатаются несколько раз.
Количество повторов кажется постоянным (например, Алиса печатает 3 раза, независимо от файла).
Иногда значения Row: иResults: совпадают, но код по-прежнему печатает «Нет совпадения».
Я не могу сказать, что представляют собой дублированные отпечатки или почему сравнение ведет себя таким образом.
Что может привести к повторению значений Row: и что именно представляют эти напечатанные числа во время цикла?
Вот мой код:
from csv import DictReader
import sys

def main():

if len(sys.argv) != 3:
print("Error: Incorrect number of arguments")
return 1

rows = []
filename = sys.argv[1]
with open(filename) as file:
file_reader = DictReader(file)
for row in file_reader:
rows.append(row)

dna_sequence = []
f = sys.argv[2]
with open(f) as file:
dna_sequence = file.read()

subsequences = list(rows[0].keys())[1:] # creates a list of keys

results = {}
for subsequence in subsequences:
results[subsequence] = longest_match(dna_sequence, subsequence)

for row in rows:
match = True

for subsequence in subsequences:
if int(row[subsequence]) != results[subsequence]:
match = False
print("No match")
break

if match:
print(row["Name"])
break

def longest_match(sequence, subsequence):

longest_run = 0
subsequence_length = len(subsequence)
sequence_length = len(sequence)

for i in range(sequence_length):

count = 0

while True:
start = i + count * subsequence_length
end = start + subsequence_length

if sequence[start:end] == subsequence:
count += 1

else:
break
longest_run = max(longest_run, count)

return longest_run

main()


Подробнее здесь: https://stackoverflow.com/questions/798 ... a-cs50-ps6
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»