Автор | Сообщение |
|
Отправлено: 31.01.24 14:50. Заголовок: 6526
Здравствуйте, не сходится с ответом решение ниже a = open('24-259.txt').readline() a=a.split('TAA') m=-1 for i in range(len(a)): w=a if len(w)>=3 and w[0:3]=='ATG' and not 'TAA' in w and not 'TGA' in w and not 'TAG' in w: m=max(m,len(w)+3) print(m) Может быть недопонимаю условие? Подскажите
|
|
|
Ответов - 5
[только новые]
|
|
|
Отправлено: 09.02.24 18:58. Заголовок: Вы не рассматриваете..
Вы не рассматриваете ситуацию, когда ATG не в начале w. Т.е. правильнее искать в строках первое вхождение ATG и проверять, что TGA и TAG не встречаются в срезе. И ещё момент. Когда разбили строку по TAA, то строки вида TAATG.... "испортились", в начале строки А пропала. Т.е. надо учесть строки, начинающиеся на TG a = open('24-259.txt').readline() a = a.split('TAA') m = -1 for w in a: i = w.find('ATG') if i != -1 and 'TGA' not in w[i:] and 'TAG' not in w[i:]: m = max(m, len(w) - i + 3) if w[:2] == 'TG' and 'TGA' not in w and 'TAG' not in w: m = max(m, len(w) - i + 4) print(m) Этот код выдаёт ответ 80
|
|
|
|
Отправлено: 09.02.24 19:11. Заголовок: неверный ответ
Так тоже получается 80: a = open('24-259.txt', 'r').readline() mk = 0 k = 0 for i in range(len(a) - 2): if a[i:i+3] == 'ATG': k += 1 elif a[i:i+3] == 'TAA': mk = max(mk, k + 3) k = 0 elif a[i:i+3] == 'TGA' or a[i:i+3] == 'TAG': k = 0 elif k > 0: k += 1 print(mk) Ошибка в ответах? Или мы ошибаемся в решениях?
|
|
|
|
Отправлено: 21.02.24 22:49. Заголовок: У вас не учтен вариа..
У вас не учтен вариант, когда внутри строки встречается комбинация ATG. И когда комбинация TGA идет к примеру со второй позиции (ей там быть можно) Прогоните на строке a='ATGATGTAA' С доработкой код выдает верный ответ. a=open('c:/24-259.txt').readline() mk = 0; nach=True; k=0 for i in range(len(a) - 2): if nach and a[ i:i + 3] == 'ATG': nach=False; k+=1 if not nach: k += 1 if k > 3 and (a[ i:i + 3] == 'TGA' or a[ i:i + 3] == 'TAG'): k = 0 if a[ i:i + 3] == 'TAA': mk = max(mk, k + 3) k = 0 print(mk)
|
|
|
|
Отправлено: 15.04.24 21:52. Заголовок: Получилось больше, чем в ответе, строка такая есть в файле
У меня получилось больше, учла все вхождения ATG, которые могут быть внутри подстроки, проверила в файле, действительно, данная подстрока длины 135 (ATGTGCTGGAATGCCCGCATTCGCGAAACAGTCCAGCAGCGCCGTCCGATGATCTCGGCTGCATCAGTTCTCGAGCAAAAATGGCATGCGAAATGTCGATACATACACAGCGACCCTACTATGGATCAAGGCTAA) есть в файле и удовлетворяет условию. Код a = open('24-259.txt').readline() a=a.replace('ATG','@') a=a.replace('TAA','*') ma=-1 while len(a)>0: if a.count('@')>0 and a.count('*')>0: ind1=a.index('@') ind2=a.index('*') s=a[ind1+1:ind2] if s.count('TGA')==0 and s.count('TAG')==0: le=len(s)-s.count('@')+s.count('@')*3 ma=max(ma,le+6) a=a[ind2+1:] else: break print(ma)
|
|
|
|
Отправлено: 16.04.24 12:52. Заголовок: Делая замену a=a.rep..
Делая замену a=a.replace('ATG','@') , вы не сможете поймать некоторые вхождения TGA В вашей цепочке именно по этой причине есть комбинация TGA ATGTGCTGGAATGCCCGCATTCGCGAAACAGTCCAGCAGCGCCGTCCGA TGATCTCGGCTGCATCAGTTCTCGAGCAAAAATGGCATGCGAAATGTCGATACATACACAGCGACCCTACTATGGATCAAGGCTAA s = open('d:/24-259.txt').readline() l=[0] for i in range(len(s)): j=i+max(l)+1 while j<=len(s): ss=s[i:j] if ss[:3]=='ATG' and ss[-3:]=='TAA' and ss[3:-3].count('TAA')==0 and ss[3:-3].count('TGA')==0 and ss[3:-3].count('TAG')==0: l.append(len(ss)) print(max(l),ss) elif ss[-3:]=='TAA': break j+=1
|
|
|
|