Я работаю над задачей ДНК 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
Проблема сравнений в ДНК (cs50 PS6) [закрыто] ⇐ Python
Программы на Python
-
Anonymous
1763757837
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()
Подробнее здесь: [url]https://stackoverflow.com/questions/79824403/comparisons-issue-in-dna-cs50-ps6[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия