WDI – zajęcia 1

Zadania rozgrzewkowe: podstawowe polecenia w Bashu i operacje arytmetyczne w Pythonie

    • Stwórz katalog o nazwie hello. Stwórz w nim plik o nazwie hello.py. Umieść w nim program w Pythonie, który wypisuje Hello world!
    • Uruchom program hello.py używając interpretera Pythona
    • Skopiuj katalog hello. Wyświetl zawartość nowego katalogu. W nowo powstałym katalogu zmień nazwę pliku hello.py na testy.py. Napisz w nim program, który wypisze wyniki działań: 123456789 + 1234567890, 2015*2016, 5/10/2015, 5.0/10/2015, 1/2, (2015*2016) do potęgi 8, jak również wynik pierwszego działania z powyższej listy minus wynik ostatniego działania (użyj zmiennych).

Zadania:

  • Zadanie z testu kompetencji: Napisz funkcję parsum(A), która policzy sumę parzystych elementów listy. Pożądane działanie funkcji ilustrują przykłady:
    parsum([1,4,2,6,5,3,1]) zwraca 12
    parsum([]) zwraca 0
    parsum([­3,­2,2,­4]) zwraca 8
  • (*) Napisz funkcję pierwiastki(a,b,c), która zwraca pierwiastki wielomianu kwadratowego ax^2 + bx + c

Zadanie bonusowe WDI

Mamy dane dwa pliki. mutacje.txt , który zawiera współrzędne punktowych mutacji na chromosomach, np:

chr1 556
chr1 557
chr1 1001
chr2 33
chr2 34

I plik geny.txt, który zawiera pozycje genów na chromosomach w postaci przedziałów:

GenA chr1 276 620
GenB chr1 700 823
GenC chr2 21 300
GenD chr2 765 989

Napisz skrypt mutacje_w_genach.py, który na podstawie podanych plików w zadanym formacie wypisze do pliku wynik.txt w osobnych linijkach kolejne geny wraz z liczbą mutacji a na standardowe wyjście poda liczbę mutacji nie przypisanych do żadnego genu. Dla podanych powyżej przykładowych danych wynik powinien być następujący:

W pliku wynik.txt

GenA 2
GenB 0
GenC 2
GenD 0

A na standardowym wyjściu:

1

Za zadanie można otrzymać maksymalnie 5 punktów. Rozwiązanie należy wysłać na adres bartek@mimuw.edu.pl najpóźniej 15. lutego umieszczając w tytule znacznik “[WDI-BONNUS]”.

Zadanie zaliczeniowe 2 – Biomorfy

Termin: czwartek 22 stycznia, godzina 23:59.

Pytania prosimy umieszczać w komentarzach, lub ewentualnie kierować pod adres: j.herman-izycka@mimuw.edu.pl

Rozwiązania w formie pakietu zad2_[nr_indeksu] spakowanego w formacie zip lub tgz wysyłamy e-mailem do osoby prowadzącej laboratorium z kopią do wykładowcy, używając w tytule tagu [WDI-2-2014]. Aby uzyskać punkty za zadanie trzeba swoje rozwiązanie przedstawić osobiście prowadzącemu lub prowadzącej laboratoria.

Biomorfy to cyfrowe stworzenia, które kształtem mogą przypominać obiekty czy zwierzęta. Biomorfy są strukturami drzewiastymi (binarnymi), tzn. biomorf ma stawy (węzły) i segmenty (krawędzie), do każdego stawu poza zerowym (czyli poza korzeniem) wchodzi jeden segment, a wychodzą z niego dwa.

Opis historii oraz przykłady biomorfów: Opis biomorfów

Każdy biomorf ma genotyp, czyli listę 10 genów określających jego wygląd. Geny mają różny wpływ na biomorfa i są reprezentowane przez liczby całkowite albo rzeczywiste.

Opis genów

  • gen 0 – głębokość, czyli liczba rozgałęzień biomorfa
  • geny 1 i 2 – kąty odchylenia kolejnych segmentów od osi poprzedniego segmentu (w stopniach). Gen 1 odpowiada odchyleniom na rozgałęzieniach o nieparzystej głębokości, a gen 2 parzystej.
  • geny 3 i 4 – długości segmentów odpowiednio na nieparzystej (gen3) i parzystej (gen4) głębokości (wyrażona w pikselach)
  • gen 5 – wydłużenie/skrócenie segmentów.  Parzyste (nieparzyste) segmenty stopnia i są długości gen4*gen5**i (gen3*gen5**i) poprzedniego parzystego (nieparzystego)
  • gen 6,7,8 – geny kodujące kolor biomorfa (w notacji RGB), z zakresu 0.01-0.99
  • gen 9 – gradient koloru (czyli rozjaśnienie/przyciemnienie segmentów na kolejnych głębokościach). Tak jak wydłużenie, jest to cecha multiplikatywna

Biomorfy są jednopłciowe, a ich kolejne pokolenia różnią się
od poprzedniego poprzez losową, pojedynczą mutacje – drobną zmianę jednego
z ich genów.

Opis mutacji

  • gen 0 – głębokość zmienia się o +/-1
  • gen 1 i 2 – odchylenie zmienia się o +/-10 stopni
  • gen 3 i 4 – długość zmienia się o +/- 10 pikseli
  • gen 5 – przeskalowanie o losową wartość z przedziału [0.75, 1.5]
  • gen 6, 7 i 8 – przeskalowanie o losową wartość z przedziału [0.75, 1.5] (wynik skalowania spoza przedziału [0.01-0.99] powinien otrzymać wartość najbliższego krańca przedziału)
  • gen 9 -przeskalowanie o losową wartość z przedziału [0.75, 1.5]


Przykład 1: Biomorf o genotypie [2, 45, 10, 50, 20, 1, 0.1, 0.1, 0.1, 2 ] , wraz z mutantami.


Przykład 2: Biomorf o genotypie [4, 120, 30, 60, 20, 1.5, 0.2, 0.2, 0.4, 1.5] wraz z mutantami

    Napisz pakiet biomorph zawierający 3 moduły do symulowania ewolucji biomorfów.

  1. (3pkt) Moduł mutacja będzie generował zmutowane biomorfy. Powinien
    zawierać funkcję mutuj(biomorf), która zwróci listę 8 biomorfów
    pochodzących z losowych mutacji wejściowego biomorfa.
  2. (7pkt + 3pkt) moduł rysowanie powinien zawierać funkcję
    rysuj(biomorf) rysującą przy użyciu modułu turtle danego biomorfa (5 pkt),
    oraz funkcję rysuj_wszystkie(biomorf, listamutantów), która narysuje na środku wejściowego biomorfa oraz wokół wszystkie jego 8 potomnych zmutowanych biomorfów w formie obrazka 3×3 (patrz przykład 2).
  3. (7pkt) moduł symulacja: pozwoli na symulowanie ewolucji biomorfa
    korzystając z doboru (który zapewnia użytkownik) :

    1. (4 pkt) Moduł powinien zawierać funkcję symuluj(startowy), która startując od zadanego biomorfa startowy wyświetla go oraz 8 jego losowych mutantów, a następnie pozwala
      wybrać jeden z nich (wpisując numer od 1 do 9 w konsoli, biomorfy numerujemy rzędami, a w rzędzie od lewej do prawej) lub zakończyć
      symulację wpisując 0 (patrz podpowiedź 1). Funkcja zwraca historię symulacji, czyli listę zawierającą kolejne pary: (lista mutantów, numer wybranego mutanta).
    2. (3 pkt) Moduł powinien oferować możliwość uruchamiania jako skrypt z parametrami:
      -p plik – nazwa pliku z opisem biomorfa (jeden wiersz-jeden gen)
      -o output – (opcjonalny) nazwa pliku do którego należy wypisać historię symulacji (jeden wiersz – jedna para (lista mutantów, numer wybranego mutanta))
      -b gen0 gen1 … gen9 – startowy biomorf zapisany jak wartości poszczególnych genów

Do rysowania należy użyć modułu turtle

Podpowiedź 1: Wczytywanie z konsoli: funkcja raw_input("Napis wyświetlany w konsoli") zwracająca napis będący linią wpisaną przez użytkownika.

Zadanie zaliczeniowe nr 1

Naszym zadaniem będzie liczenie zawartości nukleotydów GC w różnych fragmentach genomu drożdża używanego m.in. do wytwarzania piwa poprzez górną fermentację. Wielbiciele dolnej fermentacji będą musieli poczekać, aż genom drożdży lagerowych zostanie równie dobrze opisany. Sekwencja tego genomu jest dostępna tu w postaci pliku w formacie FastA, a jej opis tutaj w postaci pliku typu GFF.

Naszym zadaniem jest stworzyć program w python’ie, w postaci pojedyńczego pliku zad1_[nr indeksu].py, zawierającego 3 następujące funkcje:

  • (3 pkt) funkcja gc_content(gene_id), która dla zadanego identyfikatora genu (Np. YAL003W) znajduje jego pozycję na genomie (chromosom, początek, koniec) i oblicza udział nukleotydów G i C spośród wszystkich pozycji sekwencji odczytanej z odpowiedniego fragmentu pliku fasta. Np. zawartość GC w sekwencji “ATGCGCTGATG” to 6/11, czyli 0.54(54).
  • (3 pkt) funkcja gc_intron(chromosom), dla zadanego chromosomu znajduje w pliku gff wszystkie introny i liczy dla nich średni GC content.
  • (4 pkt) funkcja gc_compare(chromosom), która dla zadanego chromosomu wybiera wszystkie introny i dla każdego z nich liczy GC content intronu i GC content całego genu (gen dla intronu znajdujemy w polu parent pliku GFF). W wyniku zwracamy listę trójek, (gene_id, GC_intron, GC_gene).

W pliku z rozwiązaniem mogą znajdować się dodatkowe funkcje, ale powinny być one poniżej funkcji wymaganych w rozwiązaniu. Kod powinien być wyposażony w komentarze. Zakładamy, że podczas wykonania, pliki .fsa i .gff znajdują się w bieżącym katalogu. Zajęć praktycznych z drożdżami ani ich produktami nie planujemy.

Rozwiązania wysyłamy do 23. listopada e-mailem do prowadzących laboratoria z kopią do wykładowcy, używając w tytule tagu [WDI-1-2014]. Aby uzyskać punkty za zadanie trzeba swoje rozwiązanie przedstawić osobiście prowadzącemu lub prowadzącej laboratoria.