Teaching
Wykład 2
WdI – lab2
(gwiazdka oznacza zadania trudniejsze – dodatkowe/dla chętnych)
- Zaimplementuj funkcję kalkulator(d, a, b), która przyjmuje jako parametr rodzaj wykonywanego działania i dwa parametry liczbowe i zwraca wynik w postaci liczbowej. Można założyć, że działanie jest pojedynczym znakiem ze zbioru {“+”, “-“, “*”, “/”}. Przykładowo kalkulator(“+”, 2, 2) ma zwrócić 4.
- (*) Spróbuj rozwiązać to zadanie sprytniej przy pomocy funkcji eval.
- Rozwiąż problem double_sum.
- Napisz funkcję cezar(napis, przesuniecie), która dla parametru napisowego napis i parametru całkowitego przesuniecie zwróci napis zaszyfrowany szyfrem Cezara z odpowiednim przesunięciem (użyj funkcji chr i ord do kodowania i odkodowywania liter; załóż, że napis składa się z liter alfabetu angielskiego).
- Napisz iteracyjną funkcję fib(n), która dla zadanej liczby całkowitej dodatniej n zwróci n-ty wyraz ciągu Fibonacciego.
- (*) Napisz rekurencyjną wersję funkcji fib z poprzedniego zadania.
- Napisz funkcję palindom(s), która dla zadanego ciągu znaków s sprawdzi, czy napis ten jest palindromem.
- Anagramem słowa s nazywamy słowo w powstałe przez poprzestawianie liter w słowie s. Napisz funkcję anagram(s,w), zwracającą wartość True wtedy i tylko wtedy, gdy w jest anagramem s.
- Zaimplementuj funkcje insertion_sort(l), bubble_sort(l) i selection_sort(l), wykonujące odpowiednio sortowanie przez wstawianie, sortowanie bąbelkowe i sortowanie przez wybór.
- Napisz funkcję cezar z zadania 4 przy użyciu funkcji map.
Wykład 1
Witamy na zajęciach ze Wstępu do Informatyki!
Poniżej znajdą Państwo slajdy z pierwszego wykładu:
Kontakt:
Bartek Wilczyński: bartek@mimuw.edu.pl
Paweł Bednarz: pawel.bednarz@mimuw.edu.pl
Michał Startek: mist@mimuw.edu.pl
Piotr Wilkin: pwl@mimuw.edu.pl
Terminy konsultacji powinny być widoczne w USOSie.
Odnośniki do materiałów:
Zadanie dodatkowe (5pkt.)
W związku z tym, że wiele osób chciałoby zdobyć więcej punktów aby zaliczyć zajęcia opracowaliśmy dodatkowe zadanie. Jeśli ktoś stwierdzi, że zdobycie dodatkowych 5 punktów pomoże mu w zaliczeniu, może przysłać (do końca sesji) rozwiązanie.
Zadanie polega na stworzeniu pakietu do obsługi list zakupów. Rozwiązanie będzie się składało z trzech modułów. Pierwszy moduł ma zawierać funkcje do wczytywania pojedynczych list z trzech różnych formatów, opisanych na końcu treści zadania. Należy napisać osobną funkcję do wczytywania każdego z formatów (csv, lst, dct) oraz jedną zbiorczą funkcję wczytaj(plik), która na podstawie rozszerzenia nazwy pliku plik zwróci listę zakupów w wewnętrznym formacie, wybranym przez autora rozwiązania.
Drugi moduł ma zawierać następujące funkcje do operowania na listach zakupów:
– zakupy(lista, lista_zrobionych_zakupow), która zostawia na liście lista tylko te produkty, które pozostały jeszcze do kupienia (lub redukuje ilość produktu z listy lista w wypadku, gdy ilość danego produktu na liście lista jest większa niż na liście lista_zrobionych_zakupów)
– dodaj_zakupy(lista, nowe_zakupy), która doda do listy zakupów nowe produkty; w wypadku, gdy dany produkt jest już na liście lista, dodajemy po prostu do listy dodatkową ilość tego produktu z listy nowe_zakupy
– wczytaj_opis(opis), która dla każdego produktu wczyta i zapamięta jego kategorię – nie należy zakładać, że plik z opisem zawiera wpisy dla wszystkich produktów, które są obecne na aktualnej liście. Może też zawierać wpisy odnośnie produktów, których nie ma na aktualnej liście. Opis formatu pliku z opisem znajduje się poniżej.
Dodatkowo trzeci moduł służy do wypisywania listy zakupów w kilku formatach (tych, z których potrafimy wczytywać). Każda z funkcji wypisujących przyjmuje dodatkowy parametr kategorie, który jest listą i ma sprawić, żeby wypisane zostały tylko produkty z kategorii znajdujących się na liście. Produkty, które w chwili wypisywania nie mają przypisanej kategorii nie powinny zostać wypisane.
Plik z opisem jest postaci:
produkt kategoria
Formaty do wczytywania list:
1. Pliki z rozszerzeniem .csv:
masło 1, mleko 6, chleb 2
2. Pliki z rozszerzeniem .lst:
masło 1
mleko 6
chleb 2
3. Pliki z rozszerzeniem .dct:
{masło: 1, mleko: 6, chleb: 2}
Zadania w postaci spakowanego kodu źródłowego (w jednym pliku zadanie3_nr-indeksu.zip lub zadanie3_nr-indeksu.tar) przesyłają Państwo do obu prowadzących ćwiczenia (bartek@mimuw.edu.pl i pawel.bednarz@mimuw.edu.pl) do końca sesji (10.02.2013). Proszę o umieszczenie w tytule e-mail’a hasła [WDI-3] i o wysyłanie ze skrzynek studenckich (aby łatwiej było zidentyfikować autora i ew. “zapożyczenia”).
Powodzenia!
Grep + sed
Skrypt z wykładu:
http://www.mimuw.edu.pl/~gorecki/wdi/Wdi1s.pdf
Zadania na grep. Uwaga: do tych zadań warto stworzyć odpowiednie pliki testowe, żeby zobaczyć efekt działania programów.
- Znajdź wszystkie liine plików w katalogu, w którym jesteś zawierające napis 2013
- Znajdź wszystkie liine plików w katalogu, w którym jesteś (i rekurencyjnie w podkatalogach) wszystkie pliki zawierające napis “sed”, niezależnie od wielkości liter
- Znajdź wszystkie linie plików w katalogu, w którym jesteś (i rekurencyjnie w podkatalogach) zawierające słowo “foo”, ale nie zawierające słowa “bar”
Zadania na sed. Uwaga: jw.
- Napisz za pomocą sed polecenie zamieniające drugą i trzecią kolumnę w pliku, w którym kolumny są oddzielane spacjami
- Napisz za pomocą sed polecenie, która zamienia podwójne, sąsiadujące wystąpienia wyrazów na pojedyncze
- Napisz za pomocą sed polecenie, które usunie z pliku wszystkie wystąpienia napisu python, niezależnie od wielkości liter (ma usunąć zarówno napis Python, jak i python i PyThOn
Lab i wykład, 14.01.2013
Slajdy z wykładu są dostępne tutaj:
http://www.mimuw.edu.pl/~gorecki/wdi/Wdi3u.pdf
http://www.mimuw.edu.pl/~gorecki/wdi/Wdi4u.pdf
Zadania:
- Napisz skrypt, który będzie zmieniał rozszerzenie plików w danym katalogu. Skrypt przyjmuje trzy parametry: rozsz1 rozsz2 katalog i będzie zmieniał rozszerzenie plikom, które dotąd miały rozszerzenie rozsz1 na rozsz2 w katalogu katalog.
- Korzystając z funkcji read napisz skrypt, który zsumuje wartość drugiej i trzeciej kolumny w pliku podanym jako argument. Przykładowy plik znajduje się tutaj.
- Napisz skrypt korzystający z funkcji ls, który wyświetli łączny rozmiar plików w katalogu, w którym został wywołany.
- Napisz skrypt, który spakuje (uzywając polecenia tar) wszystkie pliki o rozmiarze większym niż 1MB w katalogu, w którym został wywołany. Można testować używając np. pliku z pierwszego zadania zaliczeniowego.
- Napisz skrypt sumujący wszystkie swoje parametry o nieparzystych numerach.
- Napisz skrypt, który wypisze swoje parametry w odwrotnej kolejności.
Lab 7. 1. 2013
Dziś spróbujemy nauczyć się obsługi polecenia join.
Na rozgrzewkę proponuję rozwiązać zadania 1 i 2 z kolokwium z 2010 roku (http://www/~gorecki/wdi/1011unixkol.pdf).
Teraz mamy dwa nowe zadania do tego samego tematu:
załóżmy, że plik.a.txt i plik.b.txt zawierają opisy towarów dostępnych odpowiednio w sklepach a i b.
1. Znajdź cenę towaru w sklepie b, którego jest najwięcej w sklepie a (spośród tych, które są w obu sklepach).
2. Znajdź najtańszy towar w sklepie a, którego nie ma w sklepie b.
Polecam
man join
Przykład do zadania 2
Chcieli Państwo przykład do zadania drugiego.
Np. Jeśli weźmiemy następujący opis planszy:
4
5
p 1 3 1
l 1 5 2
l 2 3 1
j 3 3 2
s 4 4 -3
j 4 3 -2
p 4 2 2
to wyświetla nam się coś takiego
A funkcja play([2,3,2,2,4,3,3,6,5,2]) zwraca:
[(1, 1),
(1, 3),
(1, 3),
(3, 5),
(1, 4),
(3, 5),
(4, 5),
(4, 2),
(4, 2),
(4, 2),
(4, 1)]
Bash – zajęcia 1
Prezentacje:
http://www.mimuw.edu.pl/~gorecki/wdi/Wdi1u.pdf
http://www.mimuw.edu.pl/~gorecki/wdi/Wdi2u.pdf
http://www.mimuw.edu.pl/~gorecki/wdi/Wdi3u.pdf
Zadania:
- W pliku avgs.txt dana jest lista miejscowości wraz ze średnią temperaturą w grudniu. Posortuj ją używając potoków w kolejności rosnącej średniej temperatury.
- Wypisz nazwę i rozmiar 5 największych plików z katalogu domowego.
- Przeszukaj swój katalog domowy rekurencyjnie i znajdź wszystkie wystąpienia plików o tej samej nazwie (mogą się różnić co najwyżej wielkością liter). Na wyjściu chcemy dostać takie nazwy poprzedzone liczbą wystąpień.
- Policz liczbę takich nieunikalnych nazw plików z poprzedniego zadania.
- Wypisz do pliku bests.txt początek, koniec i score z pliku dmel.gff posortowane po score do pliku best_scores.txt.
- Wypisz wartości score z wygenerowanego pliku best_scores.txt na pozycjach od 1000 do 2000.