#python
#python
Вопрос:
Я пытаюсь написать код для приблизительного сопоставления с образцом, как показано ниже:
def HammingDistance(p, q):
d = 0
for p, q in zip(p, q): # your code here
if p!= q:
d = 1
return d
Pattern = "ATTCTGGA"
Text = "CGCCCGAATCCAGAACGCATTCCCATATTTCGGGACCACTGGCCTCCACGGTACGGACGTCAATCAAAT"
d = 3
def ApproximatePatternMatching(Pattern, Text, d):
positions = [] # initializing list of positions
for i in range(len(Text) - len(Pattern) 1):
if Pattern == Text[i:i len(Pattern)]:
positions.append(i)# your code here
return positions
print (ApproximatePatternMatching(Pattern, Text, d))
Я продолжаю получать следующую ошибку:
Неудачный тест # 3. Возможно, вы не учитываете шаблоны, начинающиеся с первого индекса текста.
Тестовый набор данных:
GAGCGCTGG
GAGCGCTGGGTTAACTCGCTACTTCCCGACGAGCGCTGTGGCGCAAATTGGCGATGAAACTGCAGAGAGAACTGGTCATCCAACTGAATTCTCCCCGCTATCGCATTTTGATGCGCGCCGCGTCGATT
2
Ваш вывод:
['[]', '0']
Правильный вывод:
['0', '30', '66']
Не могу понять, что я делаю не так, поскольку я пытаюсь изучить python, поэтому не имею ни малейшего представления о программировании. Нужна помощь?
Комментарии:
1. Исправьте отступ кода, пожалуйста.
2. Какова цель
HammingDistance()
функции? Похоже, вы нигде его не используете.3. Отступы в моем коде правильные, когда я использую его на python. Здесь я забыл это исправить. Есть ли какие-либо другие ошибки в коде?
Ответ №1:
Я не уверен, почему вы получаете пустой список в качестве одного из своих выходных данных — когда я запускаю ваш код выше, я получаю только [0] в качестве вывода.
В частности, ваш код в настоящее время проверяет только точное соответствие символьной подстроки, без использования определения расстояния Хэмминга, которое вы также включили.
Следующее должно вернуть ожидаемый результат:
Pattern = "GAGCGCTGG"
Text = "GAGCGCTGGGTTAACTCGCTACTTCCCGACGAGCGCTGTGGCGCAAATTGGCGATGAAACTGCAGAGAGAACTGGTCATCCAACTGAATTCTCCCCGCTATCGCATTTTGATGCGCGCCGCGTCGATT"
d = 3
def HammingDistance(p, q):
d = 0
for p, q in zip(p, q): # your code here
if p!= q:
d = 1
return d
def ApproximatePatternMatching(Pattern, Text, d):
positions = [] # initializing list of positions
for i in range(len(Text) - len(Pattern) 1):
# and using distance < d, rather than exact matching
if HammingDistance(Pattern, Text[i:i len(Pattern)]) < d:
positions.append(i)
return positions
print (ApproximatePatternMatching(Pattern, Text, d))
Ответ №2:
def ApproximatePatternMatching(Pattern, Text, d):
positions = []
for i in range(len(Text)-len(Pattern) 1):
x = Text[i:i len(Pattern) 1]
if x != Pattern:
y = HammingDistance(Pattern,x)
if y <= d:
positions.append(i)
return positions
def HammingDistance(p, q):
count = 0
for i in range(len(p)):
x = p[i]
y = q[i]
if x != y:
count = count 1
return count
Комментарии:
1. @Azia ваш код проверяет, равно ли окно k-mer шаблону, на самом деле требуется приблизительное соответствие, а не точное соответствие и установка для него значения с помощью функции расстояния Хэмминга. и если эта vale меньше или равна p, мы должны перечислить местоположения..