середа, 12 листопада 2014 р.

Generating Theoretical Spectrum Problem: Generate the theoretical spectrum of a cyclic peptide.
     Input: An amino acid string Peptide.
     OutputCyclospectrum(Peptide).

CODE CHALLENGE: Solve the Generating Theoretical Spectrum Problem.
Sample Input:
     LEQN
Sample Output:
     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"))


Немає коментарів:

Дописати коментар