Zaliczenie z Bioinformatyki, podstawy programowania

0

Witam serdecznie.
Ogłosiłem się na forum o podobnej tematyce, ale ze względu na czas staram się podłapać inne fora z nadzieją na zbawienie.
W przyszłe wakacje wskakuje pod mundur, ale zanim to nadejdzie potrzebuje zakończyć mały romans z podstaw programowania które są na zakończeniu mojej edukacji późno szkolnej.
Mam do wykonania dwa zadania zaliczeniowe, ściśle związane z tematyką studiów. Wynikiem mojej dezorganizacji jest zapewne wadliwość sposobu nauczania. Wiedziałem że jak przyjdzie moment pracy własnej to zaginę w lesie.
Korzystaliśmy z Linuxa, pisaliśmy w "Geany", wszystko oparte oczywiście na Pythonie.
Pewnie pojawi się oburzenie - "ło pewnie się zgłosił żeby odwalić za niego robotę". Trochę tak i nie, liczę tylko na otwartość i życzliwość aby móc ruszyć z miejsca z którego kisnę od 2 dni. Zapewne te forum jest więc elementem desperacji - zgadza się.
Dziękuje za zainteresowanie. Może znajdzie się dobra dusza która chociaż by poświęciła mi - nowicjuszowi trochę czasu aby ugryźć to krok po kroku.

  1. Przygotowanie losowej sekwencji aminokwasowej lub nukleotydowej (wybór wskazuje użytkownik) o podanej z klawiatury długości. W przypadku sekwencji nukleotydowej dodatkowo przygotowywana jest sekwencja komplementarna. Przygotowane sekwencje zapisane są w pliku i wydrukowane na ekranie.

  2. Wyszukanie we wczytanej z pliku sekwencji nukleotydowej kodonów START oraz STOP i wydrukowanie na ekranie ich pozycji. Wycięcie z sekwencji pierwszego fragmentu od kodonu START (włącznie) do kodonu STOP (bez niego) i zapisanie do pliku dyskowego w formacie FASTA.

No więc, żeby przybliżyć bardziej tematykę biologiczną zobrazuje to w sposób, w jaki mnie uczono - (jak zrobić jajecznice 1. idź do lodówki, 2. weź jajko 3. weź patelnie 4. wbij jajko itd.)

Przykład pierwszy ma wyglądać mniej więcej tak :

  1. Użytkownik uruchamiając skrypt zapoznaję się oczywiście z jego przeznaczeniem. Myślę że zwykłe print (etc) wystarczy
  2. Pierwszym poleceniem powinno być wybranie struktury która nas interesuje. Czyli coś na zasadzie "Określ która sekwencja jest Ci potrzebna 1 - nukleotydowa 2 - aminokwasowa".
  3. Oczywiście po wybraniu odpowiednio przypisanej liczby powinno dalej wyskoczyć "Podaj długość sekwencji" - tu podejrzewam że poprzez skorzystanie z klawiatury numerycznej powinno się wybrać długość naszej struktury (myślę że od 0-1000) zdecydowanie wystarczy.
  4. Ostatnią rzeczą jest zasada komplementarności w przypadku sekwencji nukleotydowej). To nic innego jak prosta reguła w naszym DNA, gdzie każda zasada ma swoją parę. Pary wyglądają następująco A=T (adenina=tymina) C=G (cytozyna=guanina). Czyli jeżeli dla przykładu wpisze że chce strukturę składająca się z 3 elementów - losowość programu da mi np: ATG, to program powinien od razu napisać podmiankę w postaci TAC. Zgodnie z zasadą komplementarności. Zwykła zamiana znaków w prostym tego słowa znaczeniu.
  5. Na samym końcu żeby nam zapisało w pliku. Sam nie wiem czy jest to możliwe, ale w sytuacji jak wygenerujemy sobie losowy fragment żeby jego finał zapisywał nam w pliku.
  6. Ostatnią uwagą jest fakt, że program ma być wolny od błędów (narzucone przez prowadzącego) czyli w sytuacji jak wpisze * jak w punkcie 2, zamiast 1 albo 2 - np. 3 to żeby wywaliło błąd.
  7. Istotną również informacją jest również z czego ma być generowany ten losowy fragment, czy sekwencja.
    A) w przypadku nukleotydowej - to tylko znaki (A,C,T,G)
    B) w przypadku aminokwasowej- to jest : (A,R,N,D,B,C,Q,E,Z,G,H,I,L,K,M,F,P,S,T,W,Y,V) (nic innego jak jednoliterowe skróty nazw aminokwasów, ale to jest nieistotne)
    I to wszystko.

Drugi przykład:

  1. Program powinien oczywiście opisać się do czego służy.
  2. Powinien wczytać plik z dysku w którym taka sekwencja jest już wcześniej przygotowana.
  3. Z kodonami START i STOP jest bardzo podobnie jak na zasadzie języka Braille. Niewidomy człowiek śledząc palcem tekst wie gdzie jest początek, jak również gdzie jest zakończenie tego zdania. Tak samo jest w biologii, proces transkrypcji zaczyna swoją prace w momencie natrafienia na kodon START, jak również kończy swoją przygodę jak napotka kodon metę - STOP. Kodon zawsze składa się z 3 znaków.
    Kodon START definiowany jest skrótem - "AUG"
    Kodon STOP definiowany jest skrótami - "UAA", "UAG", "UGA"
    I każdy inny kodon zawsze składa się z 3 elementów, a każda taka trójka definiuje inny aminokwas, ale to bez znaczenia w tym programie.
  4. Wczytując plik powinien zamienić znaki małe, na duże jeśli takie występują
  5. Jeśli już zamieni na znaki duże, powinien wykryć te cztery wcześniej opisane kodony ( 1 START oraz 3 STOP, !jeśli takie występują!, bo nie muszą) i je podkreślić, wyróżnić, zaznaczyć, zmienić kolor to już nie ma znaczenia większego.
  6. Jeśli już takie fragmenty wyróżni powinien wyciąć fragment tak jak jest to wskazane w zadaniu. Dla lepszego zobrazowania:

A) wczytujemy plik
B) ukazuje nam się struktura
AUUGACGGCAUGAGCUGUUCCGCGUGAAAGCAC
C) zostają wyróżnione kodon START i kodon STOP
AUUGACGGCAUGAGCUGUUCCGCGUGAAAGCAC
D) wycinanie fragmentu od kodonu START (włącznie) do kodonu STOP (bez niego)
AUGAGCUGUUCCGCG
E) zapisanie takiego fragmentu na dysku w formacie .fasta

Według mnie ten program może wykonać całość ciągiem. Nie musi być nic do wpisania, wybrania, negowania. Jego działanie ma się ograniczać tylko do wycinania fragmentu z wczytanego pliku i zapisaniu go do formatu .fasta

Bardzo proszę o pomoc

0
bogdans napisał(a):

Ten wątek Pomoc w zadaniu zaliczeniowym - cięcie ciągu znaków i wgrywanie pliku widziałeś?

Koleżanka z roku. Najwidoczniej skorzystała również z pomocy doraźnej

0

Rozpisałeś sobie to nawet na podupunkty więc w czym jest problem? Weźmy np.

Pierwszym poleceniem powinno być wybranie struktury która nas interesuje. Czyli coś na zasadzie "Określ która sekwencja jest Ci potrzebna 1 - nukleotydowa 2 - aminokwasowa".

Wystarczy odczytać wybór i przechować go w jakieś zmiennej, np.:

selected_seq = input("Określ która sekwencja jest Ci potrzebna 1 - nukleotydowa 2 - aminokwasowa")

Chcemy by użytkownik wybrał 1 lub 2 i nic innego więc pytajmy tak długo aż to zrobi:

while True:
    selected_seq = input("Określ która sekwencja jest Ci potrzebna 1 - nukleotydowa 2 - aminokwasowa")
    if selected_seq==1 or selected_seq==2:
        break
    print('Wpisz 1 lub 2")
Oczywiście po wybraniu odpowiednio przypisanej liczby powinno dalej wyskoczyć "Podaj długość sekwencji" - tu podejrzewam że poprzez skorzystanie z klawiatury numerycznej powinno się wybrać długość naszej struktury (myślę że od 0-1000) zdecydowanie wystarczy.

Możemy:

seq_length = input("Podaj długość sekwencji")

Oczywiscie chcemy by to była liczba i to liczba z zakresu więc możemy zrobić tak (spróbować skonwertować do int i jak nie wyjdzie wyświetlić informację i sprobówac ponownie):

while True:
    try:
        seq_length = int(input("Podaj długość sekwencji 1- 1000"))
        if seq_length <1 or seq_length>1000:
            print('Dlugosc sekwencji tylko od 1 do 1000")
        else:
            break
    except ValueError:
        print("Wpisuj tylko liczby")

itp rozbij swoje wymagania i spróbuj zorientować co tak naprawdę potrzebujesz. Chcesz pobrać wartość to wpisz np. "how to get value from user in python" w google i szybko znajdziesz. Łatwiej byłoby Ci pomóc gdybyś miał konkretne problemy i coś już zrobionego

0

Co do zadania drugiego to nie będę Ci podawał jak otwierać, zapisywać pliki, zmieniać wielkość liter itp bo to łatwo sobie wygooglujesz ( powinieneśbo umiejetnosc szukania informacji jest ważną umiejętnością). Ale zaproponuję Ci algorytm:

AUUGACGGCAUGAGCUGUUCCGCGUGAAAGCAC

Skoro kodon ma zawsze 3 elementy ziteruj Twój string co 3 elementy:

code = AUUGACGGCAUGAGCUGUUCCGCGUGAAAGCAC
for i in range(0, len(code), 3):
    kodon = code[i:i+3]

teraz możesz dodać jakiś blok, który będzie zapisywać do temp_str kodony po wykryciu kodonu startowego. Jeżeli wykryjesz kodon końcowy (jeden z 3) to zapisz do pliku i wyczyść temp_str. Jeżeli wykryjesz kodon startowy bez kodonu końcowego to zapisz co masz w temp_str do pliku, wyczyść temp_str i wpisz tam kodon startowy. Jak sobie rozpiszesz przykładowe działanie takiej pętli powinno to być jasne. Np.:

Mając AUUGACGGCAUGAGCUGUUCCGCGUGAAAGCAC podziel to na 3 dostając 'AUU GAC GGC AUG AGC UGU UCC GCG UGA AAG CAC'. Dostając AUU i nie mając kodonu startowego to.. itp.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0