Generating Theoretical Spectrum Problem: Generate the theoretical spectrum of a cyclic peptide.
Input: An amino acid string Peptide.
Output: Cyclospectrum(Peptide).
Output: Cyclospectrum(Peptide).
CODE CHALLENGE: Solve the Generating Theoretical Spectrum Problem.
Sample Input:
LEQN
LEQN
Sample Output:
0 113 114 128 129 227 242 242 257 355 356 370 371 484
Вот оно моя программа для и линейных и циклических спектров одновременно. Ретурн раскомитить в йф-ции нужный только надо:0 113 114 128 129 227 242 242 257 355 356 370 371 484
def spectrum(Peptide):
linear_spec = []
cyclic_spec = []
mass = []
mass.append(0)
linear_spec.append(0)
cyclic_spec.append(0)
f = open('aa_mass.txt')
lines = f.readlines()
for i in range(0, len(Peptide)):
for line in lines:
if line[0] == Peptide[i]:
print (int(line[2:int(len(line))]))
mass.append(int(mass[i]) + int(line[2:int(len(line))]))
mass_pept = int(mass[i]) + int(line[2:int(len(line))])
print (str(mass_pept) + " mass pept")
mass.sort()
mass_cyclic = mass
print (mass)
print (mass_cyclic)
for i in range(0, len(mass)-1):
for j in range(i+1, len(mass)):
#print()
#print (mass[j] - mass[i])
linear_spec.append(mass[j]-mass[i])
f.close()
linear_spec.sort()
for i in range(len(linear_spec)):
linear_spec[i] = str(linear_spec[i])
for i in range(0, len(mass_cyclic)-1):
for j in range(i+1, len(mass_cyclic)):
#print()
#print (mass[j] - mass[i])
cyclic_spec.append(mass[j]-mass[i])
if i > 0 and j <= len(mass_cyclic):
if mass_pept - mass[j] + mass[i] in cyclic_spec:
continue
cyclic_spec.append(mass_pept - mass[j] + mass[i])
''' на данном этапе надо заметить, что полезно понимать как работает алгоритм, а не тупо кодить то, что дано в исходниках и подгонять ответ под ответ. Иначе - прога отрабатывает для примера, но для реальных данных некоторых значений в спектре не хватает. По-этому, надо поправить блок ифа вот так:
if i > 0 and j < len(mass_cyclic) - 1:
cyclic_spec.append(mass_pept - mass[j] + mass[i])
т.е. в циклический спектр нужно добавить разницу только тех составных у которых индексы строго больше первого и строго меньше последнего. И совсем не надо проверять наличие конкретных значений в массиве.. это кривой и ложный путь, хоть для примера и дает корект резулт
'''
cyclic_spec.sort()
for i in range(len(cyclic_spec)):
cyclic_spec[i] = str(cyclic_spec[i])
return " ".join(cyclic_spec)
#return " ".join(linear_spec)
print (spectrum("LEQN"))
Немає коментарів:
Дописати коментар