Проблема сравнений в ДНК (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»