-
POmoc w napisaniu programu w Pythonie
Witam wszystkich forumowiczów.
Mam problem i jedynymi do których mogę się z nim zwrócić. Problem jest taki że muszę napisać program na zajęcia z informatyki dla kogoś bliskiego. Bez tego programu moja dziewczyna nie zaliczy semestru... więc proszę o poomoc. Treść zadania jest taka:
"Napisz program czytający plik PDB i liczący atomy w każdym aminokwasie. Po przeanalizowaniu pliku program powinien podawać jaka jest najbardziej prawdopodobna liczba atomów dla każdego aminokwasu oraz wypisywać wszystkie numery reszt, które mają inną liczbę atomów."
Dla mnie to jest czarna magia bo nie jestem chemikiem a co ważniejsze programistą Pythona. Na wszystkie pytania dotyczące strony chemicznej mogę udzielic odpowiedzi po konsultacji z chemikiem. Mam mało czasu na to zadanie....do wtorku...wiem że to mało czasu ale będę wdzięczny za każdą pomoc.
Tutaj znajduje się plik pdb http://www.pdb.org/pdb/files/1g2y.pdb
mniej wiecej takie objaśnienie moge przedstawić:
1. w pierwszym kroku program po odczytaniu tego pliku ma policzyć liczbę atomów w każdym aminokwasie w każdym z 4ech łańcuchów. Jak popatrzeć na ten plik po jego otwarciu to po znalezieniu w pierwszej kolumnie ATOM dalej lecą już atomy w każdym łańcuchu. Pierwsza Kolumna ATOM oznacza że w danej lini jest opis atomu. w następnej kolumnie jest liczba porządkowa atomu. Dalej jest Symbol atomu (C, N, O itd) . Dalej jest trzyliterowy skrót od nazwy aminokwasu np. MET, GLY, VAL itd. Następnie jest litera A,B,C lub D i to oznacza kolejny łańcuch. Następna i ostatnia interesująca zadajęcego zadanie kolumna to kolumna podająca kolejny numer danego aminokwasu w danym łańcuchu. Pierwszy krok ma policzyć ile atomów jest w każdym aminokwasie i w każdym łańcuchu.
2. W drugim kroku program powinien porównać te cztery łańcuchy A,B,C,D i podać liczbę atomów w każdym aminokwasie.Czyli że np. MET 1 (ponieważ w danym łańcuchu MET może pojawiać się więcej razy, to musi byc zaznaczone w której Metionienie jest tyle atomów) w pierwszym łańcuchu ma 5 atomów, w drugim 5, w trzecim 5 a w czwartym np.6.
3. No i wreszcie finał czyli program ma wyrzucić w którym łańcuchu różni się liczba atomów dla danego aminokwasu czyli np. MET 1 ma w łańcuchu D 6 atomów a w pozostałych 5, VAL 2 ma w łańcuchu C 4 atomy a w pozostałych 5 itd. NIe sprawdzałem czy tak rzecdzywiście jest...to jest tylko przykład.
Jeszcze raz proszę o wszelką pomoc w napisaniu tego programu i z góry dziękuję i pozdrawiam.
Swinger76
-
Majac wiecej czasu moglbym pomoc w Perlu ale nie pytonie... Zadanie byloby znacnie prostsze gdybys dodal jeszcze link do specyfikacji formatu PDB - ciezko sie domyslic ktore to sekwencje a ktore opisy aminokwasow :-(
-
udało mi się spłodzić przy pomocy znajomego z akademika takie cos...dokładniej jemu sie udało spłodzić za co wdzięczny bardzo jestem!ale problem jest bo nie dziala jak powinno...moglby to ktoś sprobować poprawić?
#!/usr/bin/env python
n=open('dane.pdb','r')
k=n.readlines()
l=[]
poprzednia = ""
ile = 0
liczbaBialek = 20
for s in k:
if s.startswith('ATOM'):
o = s.split()
nazwa = o[3]
if poprzednia == nazwa:
ile += 1
else :
if poprzednia != "":
l.append([poprzednia, ile])
poprzednia = nazwa
ile = 1
nazwa = ""
sprawdzone = []
indeksy = []
for i in range(len(l)):
k = l[i]
nazwa = k[0]
if (nazwa in sprawdzone) == False:
sprawdzone.append(nazwa)
znalezione = [i]
for j in range (i + 1, len(l)):
b = l[j]
if nazwa == b[0]:
znalezione.append(j)
indeksy.append(znalezione)
niezgodne = []
prawdopodobna = []
for i in range (len(indeksy)):
k = indeksy[i]
licznik = 0
niezgodnetmp = []
ktora = 0
if True:
sprawdzana = l[k[ktora]]
for j in range (0, len(k)):
f = l[k[j]]
if sprawdzana == f:
licznik += 1
else :
niezgodnetmp.append(k[j])
if licznik < (len(k) / 2):
licznik = 0
niezgodnetmp = []
ktora += 1
niezgodne.append(niezgodnetmp)
prawdopodobna.append(sprawdzana[1])
for i in range(len(sprawdzone)):
print "skrot: " + sprawdzone[i] + " prawdopodobne liczba atomow: %d" % (prawdopodobna[i])
if len(niezgodne[i]) != 0:
print "reszty majace inna liczbe: "
k = niezgodne[i]
for j in range (len(k)):
print "%d " % (k[j])
print len(sprawdzone)
Mam czas do jutra....:/
i jest jeszcze jeden program który muszę napisać. Ma on wypisywać litery alfabetu w linijce, lub w kolumnie...to znaczy powinien robić i jedno i drugie.Chodzi tu o użycie zamiany cyfr na litery a następnie ich wyświetlenie.POMOCY!
Zasady Postowania
- Nie możesz zakładać nowych tematów
- Nie możesz pisać wiadomości
- Nie możesz dodawać załączników
- Nie możesz edytować swoich postów
-
Forum Rules