# DJFZ 2021 ## Zajęcia 1 11.10.2021 ### Informacje na temat przedmiotu Prowadzący: mgr Jakub Pokrywka mail: jp40407@st.amu.edu.pl Dyżury: B1-46. Przed przyjściem proszę się umówić na spotkanie, najlepiej jest wysłać mi prywatną wiadomość na MS TEAMS. W celu zaliczenia przedmiotu należy zdobyć punkty za zadania na laboratoriach oraz zaliczyć kolokwium. Punktowane zadania będziemy wykonywać na laboratoriach oraz po nich (przed następnymi zajęciami), ich ilość determinuje ocenę. Oprócz tego należy zaliczyć kolokwium z wyrażeń regularnych na ostatnich zajęciach. Sam wynik kolokwium nie będzie wpływał na ocenę, ale bez zdanego kolowkium nie da sie zaliczyć przedmiotu. Punktacja za zadania jest następująca: - mniej niż 30 punktów - 2 - 30-34- 3 - 35-39- 3.5 - 40-44- 4 - 45-49- 4.5 - więcej niż 49- 5 #### Wysyłanie zadań Proszę stworzyć prywatne repozytorium na https://git.wmi.amu.edu.pl/ o nazwie djfz-2021-sNRINDEKSU oraz dać prawa do odczytu użytkownikowi kubapok (prowadzący przedmiot). W NRINDEKSU proszę wpisać swój nr indeksu, np. djfz-2021-s123456. Następnie w swoim repozytorium proszę spullować niniejsze repozytorium: `git pull git@git.wmi.amu.edu.pl:kubapok/djfz-2021.git` W ten sposób będziemy aktualizować zadania co zajęcia. Proszę rozwiązać zadanie TASKX02 lub TASKX03 w zależności od numeru indeksu. W tym celu należy dodac plik `run.py` w odpowiednim katalogu. Za pomocą `run_reports.py` można sprwawdzić ilość punktów. Do repo proszę dodawać wyłącznie plik `run.py` w odpowiednim katalogu, chyba że w zadaniu jest zaznaczone inaczej. Proszę również nie modyfikować innych plików. Wszystkie zadania należy robić w terminie zaznaczonym w `description.txt`. Po terminie będę podawał punktację za pomocą USUSa w "sprawdziany". Zadania robimy do końca soboty poprzedzającej zajęcia #### Aktualizacja repozytorium We własnym repozytorium: `git pull git@git.wmi.amu.edu.pl:kubapok/djfz-2021.git` ## Zajęcia 2 21.11.2021 Wyrażenia regularne Dokumentacja wyrażeń regularnych w python3: https://docs.python.org/3/library/re.html ### Podstawowe funkcje search - zwraca pierwsze dopasowanie w napisie findall - zwraca listę wszystkich dopasowań (nienakładających się na siebie) match - zwraca dopasowanie od początku string To tylko podstawowe funkcje, z których będziemy korzystać. W dokumentacji opisane są wszystkie. ### Obiekt match ``` import re answer = re.search('na','banan') print(answer) print(answer.start()) print(answer.end()) print(answer.group()) answer = re.search('na','kabanos') print(answer) type(answer) if answer: print(answer.group()) else: pass ``` ### Metaznaki - [] - zbiór znaków - . - jakikolwiek znak - ^ - początek napisu - $ - koniec napisu - ? - znak występuje lub nie występuje - \* - zero albo więcej pojawień się - \+ - jeden albo więcej pojawień się - {} - dokładnie tyle pojawień się - | - lub - () - grupa - \ -znak ucieczki - \d digit - \D nie digit - \s whitespace - \S niewhitespace ### Flagi Można użyć specjalnych flag, np: `re.search('ma', 'AlA Ma KoTa', re.IGNORECASE)`. ### Przykłady (objaśnienia na laboratoriach) Do nauki lepiej użyć pythona w wersji interaktywnej, a najlepiej ipython. ``` import re text = 'Ala ma kota i hamak, oraz 150 bananów.' re.search('ma',text) re.match('ma',text) re.match('Ala ma',text) re.findall('ma',text) re.findall('[mn]a',text) re.findall('[0-9]',text) re.findall('[0-9abc]',text) re.findall('[a-z][a-z]ma[a-z]',text) re.findall('[a-zA-Z][a-zA-Z]ma[a-zA-z0-9]',text) re.findall('\d',text) re.search('[0-9][0-9][0-9]',text) re.search('[\d][\d][\d]',text) re.search('\d{2}',text) re.search('\d{3}',text) re.search('\d+',text) re.search('\d+ bananów',text) re.search('\d* bananów','Ala ma dużo bananów') re.search('\d* bananów',text) re.search('ma \d? bananów','Ala ma 5 bananów') re.search('ma ?\d? bananów','Ala ma bananów') re.search('ma( \d)? bananów','Ala ma bananów') re.search('\d+ bananów','Ala ma 10 bananów albo 20 bananów') re.search('\d+ bananów$','Ala ma 10 bananów albo 20 bananów') text = 'Ala ma kota i hamak, oraz 150 bananów.' re.search('\d+ bananów',text) re.search('\d+\sbananów',text) re.search('kota . hamak',text) re.search('kota . hamak','Ala ma kota z hamakiem') re.search('kota .* hamak','Ala ma kota lub hamak') re.search('\.',text) re.search('kota|psa','Ala ma kota lub hamak') re.findall('kota|psa','Ala ma kota lub psa') re.search('kota (i|lub) psa','Ala ma kota lub psa') re.search('mam (kota).*(kota|psa)','Ja mam kota. Ala ma psa.').group(0) re.search('mam (kota).*(kota|psa)','Ja mam kota. Ala ma psa.').group(1) re.search('mam (kota).*(kota|psa)','Ja mam kota. Ala ma psa.').group(2) ```