WDI – zajęcia 13

Drugie zajęcia z BASHa – programowanie

Wykonanie polecenia w tle:
polecenie &
$?
– kod zakończenia programu – 0 jeśli poprawnie, inny jeśli pojawił się błąd (często wartość oznacza rodzaj błędu)

$1, $2, … – parametry wykonania programu. Np. skrypt.sh napis1 2 umieści w zmiennej $1 napis1, a w zmiennej $2 liczbę 2. $@ – lista wszystkich parametrów.
Continue reading “WDI – zajęcia 13”

WDI – zajęcia 6

Słowniki:
Rozgrzewka (najlepiej w ipythonie):

  • Stwórz pusty słownik. Zapoznaj się z funkcjami, jakie są dla niego dostępne. Dodaj do niego następujące elementy: pod kluczem 1 wartość 3, pod kluczem 5 -> 2, a pod “a” -> 4. Usuń jeden z elementów używając metody del, a drugi używając metody pop. Przypisz na pozostały element wartość 10.
  • Sprawdź, jak działają metody keys, values, items. Której z nich odpowiada zwykła iteracja pętlą for?

Continue reading “WDI – zajęcia 6”

WDI – zadanie zaliczeniowe 1

Sekwencjonowanie DNA w technologiach nowej generacji prowadzi do odczytania milionów krótkich sekwencji DNA zwanych odczytami. Często potrzeba odnaleźć pozycje takich odczytów w genomie, czyli zmapować je do genomu. Proces mapowania odczytów (sekwencji DNA) do genomu referencyjnego polega (w dużym uproszczeniu) na przypisaniu każdemu odczytowi współrzędnych genomowych n, m wskazujących odpowiednio chromosom oraz numer pary zasad w sekwencji tego chromosomu z genomu referencyjnego. Te współrzędne oznaczają miejsce z którego dany odczyt najprawdopodobniej został wygenerowany (chromosom oraz początkową pozycję na tym chromosomie). 
Continue reading “WDI – zadanie zaliczeniowe 1”

WDI – zajęcia 5

1. W pliku DNA.txt znajduje się fragment nici DNA człowieka. Znajdź liczbę wszystkich wystąpień sekwencji ACGT. Wypisz wszystkie pozycje, na których znajduje się ta sekwencja.

2. Napisz funkcję statystyki(nazwa_pliku), która dla danego pliku nazwa_pliku stworzy plik statystyka_nazwa_pliku, w którym zamieści linijkę z liczbą linii, liczbą słów, oraz informacją, którym znakiem w pliku jest znak ‘!’. Napisz funkcję sprawdz(nazwa_pliku), która sprawdzi, czy statystyka w pliku statystyka_nazwa_pliku jest aktualna.

3. (★) K-merami nazywamy sekwencje DNA (czyli sekwencje składające się z liter A,C,G,T) długości k. Dla pliku DNA.txt wypisz najczęściej występujący 4-mer.
Wskazówka:

  • Zacznij od wygenerowania listy wszystkich 4-merów.

4. W pliku HP1b.gff3 znajdują się dane o miejscach wiązania białka HP1b do nici DNA muszki owocowej. Znajdź średnią wartość sygnału dla chromosomu 2L na pozycjach zawartych między 1,000,000 a 5,000,000.

WDI – zajęcia 4

Zadania powtórkowe:

1. Napisz rekurencyjną funkcję check_sort(v), która sprawdzi, czy lista v jest posortowana (ściśle, rosnąco lub malejąco).

2. Weźmy funkcję f zdefiniowaną następująco:

def f(n):
    if n % 2 == 0:
        return n / 2
    else:
        return 3*n + 1

Napisz rekurencyjną funkcję collatz_steps(n), która zwróci dla zadanego n liczbę elementów ciągu n, f(n), f(f(n)), …, potrzebnych do osiągnięcia 1. Np.

collatz_steps(1) == 0
collatz_steps(4) == 2

3. Napisz 2 wersje (iteracyjną i rekurencyjną) funkcji incr_segment(v), która dla zadanej listy v zwróci jej najdłuższy rosnący segment (spójny kawałek).

4. (★) Napisz rekurencyjną funkcję rev_number(n), która dla danej liczby całkowitej n zwróci liczbę powstałą z n poprzez odwócenie porządku cyfr (np. rev_number(123)=321). Uwaga: chodzi o rozwiązanie używające wyłącznie operacji na liczbach całkowitych.

Operacje na napisach:

5. Używając maksymalnie trzech wywołań funkcji strip, rstrip, lstrip należy przekształcić:

  • ‘abcccbca’ w ‘ccc’
  • ‘bababa’ w ‘ab’

6. Zastąp spacje przez myślniki w napisie lorem ipsum dolor sit amet, consectetur Adipiscing elit . nunc sit amet ligula in nisi varius mattis nec a urna . phasellus tristique vehicula elit id imperdiet. lorem ipsum dolor sit amet , consectetur adipiscing Elit. Nunc orci libero, accumsan quis Cursus vel , pretium nec dui. Nunc lobortis mollis felis, at malesuada velit volutpat Id. Pellentesque Quis iaculis massa . vestibulum Commodo Egestas fringilla . proin quis justo nunc. Nam sed ultricies orci. curabitur adipiscing , Dolor vel rhoncus Accumsan , sapien tellus volutpat eros , At luctus mi augue sit Amet turpis . Aliquam sagittis, lacus id commodo volutpat , erat Justo auctor massa, in faucibus quam lectus et libero. curabitur laoreet Risus in urna aliquet Vel fringilla felis volutpat. morbi Suscipit purus Velit . “ używając:

  • funkcji replace
  • funkcji split i join

7. Napisz skrypt, który dokona korekty tekstu z poprzedniego ćwiczenia:

  • każde słowo rozpoczynające zdanie musi zaczynać się z dużej litery,
  • pozostałe słowa zaczynają się z małej litery,
  • sąsiednie słowa muszą być rozdzielone dokładnie jedną spacją,
  • znaki interpunkcyjne przylegają do poprzedzającego je słowa,
  • tekst rozpczyna się od słowa, a kończy kropką (należy usunąć zbędne białe znaki).

Zadania z kolokwiów:
Kolokwium 2012:
– zadanie 1 – segmenty (było na kartkówce)
Kolokwium poprawkowe 2012:
– zadanie 2 i 3 – quasindromy
– zadanie 1 – ceny

WDI – zajęcia 3

    1. Co robi funkcja f?
      		def f(a, b):
      			if b == 0:
      				return 0
      			return a + f(a, b - 1)
    2. Co się stanie jeśli w powyższym przykładzie zmienimi znak + na *?
    3. Co zwracają funkcje e i o zdefiniowane poniżej?
      		def e(n):
      		      if n == 0:
      			        return True
      	  	      else:
      				return o(n - 1)
      
      		def o(n):
      			if n == 0:
      				return False
      			else:
      				return e(n - 1)
    4. Co zwracają funkcje take i skip zdefiniowane poniżej?
      		def take(l):
      			if l == []:
      				return []
      			else:
      				return [l[0]] + skip(l[1:])
      		def skip(l):
      			if l == []:
      				return []
      			else:
      				return take(l[1:])
    5. Napisz rekurencyjną funkcję rec_rev(s), która dla zadanego napisu s zwróci odwrócony napis s.
      Hint: Wykorzystaj dodawanie napisów s1+s2 oraz to, że napisy można indeksować podobnie jak listy.
    6. Napisz rekurencyjną funkcję rec_pal(s) zwracającą True, gdy s jest palindromem. W przeciwnym przypadku funkcja zwraca wartość False.
    7. Napisz rekurencyjną funkcję rec_find(v, x), która dla zadanej posortowanej rosnąco listy liczb v zwróci wartość True, gdy element x występuje na liście v. W przeciwnym przypadku funkcja zwraca wartość False. Zakładamy, że lista v jest posortowana rosnąco — nie trzeba tego sprawdzać.
    8. Napisać funkcję merge z wykładu w wersji iteracyjnej.
    9. (★) Zdefinujmy ciąg Fibonacciego w następujący sposób:

      • f(0) = 0, f(1) = f(2) = 1 gdy n <= 2
      • f(n) = f(n-1) + f(n-2) w p.p.

      Wypisz drzewo wywołań rekurencyjnych f(n). Za pomocą znaków | (pipe) połącz wywołania rekurencyjne z wywołującą funkcją (f(n-1) oraz f(n-2) z f(n)), a odgałęzienia do sumowanych wyników zaznacz znakiem + (plus). Przykłady pokazują jak wygląda wyjście dla różnych wartości n.

    10. (★) Podziałem liczby naturalnej n na k części nazywamy ciąg k liczb naturalnych sumujących się do n. Napisz funkcję p(n,k), która dla danej liczby naturalnej n znajdzie liczbę podziałów liczby n na k części.

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