args = parser.parse_args() print(args)
$ python3 /tmp/skrypt.py aa tt usage: skrypt.py [-h] [-v] [ARG]
skrypt.py: error: unrecognized arguments: tt
↪
$ python3 /tmp/skrypt.py -v aa Namespace(ARG='aa', verbose=True)
To tylko mały przykład możliwości argparse, a szczegóły (jak zwykle) – w dokumentacji.
7 Wykład wideo
• Python: wprowadzenie –https://www.youtube.com/watch?v=Nhb4WX_9Tgc
• Python: funkcje –https://www.youtube.com/watch?v=uHBzNSWTGMA
• Python: pętle i warunki – https://www.youtube.com/watch?v=d1igYsEZymM
• Python: napisy –https://www.youtube.com/watch?v=A0ZtouykAjI
• Python: wyrażenia regularne –https://www.youtube.com/watch?v=OklkE9T8ur8
• Python: listy – https://www.youtube.com/watch?v=vpMGkToxf_I
• Python: typy i referencje – https://www.youtube.com/watch?v=LiMPlG0X9e0
• Python: operacje bitowe i wyjątki – https://www.youtube.com/watch?v=fU3FwceTIM0
• Python: słowniki i klasy – https://www.youtube.com/watch?v=K0XdD6aygwo
• Python: pliki i czekanie na dane –https://www.youtube.com/watch?v=OhMh5yYZgBg
• Python: procesy potomne (fork i exec) –https://www.youtube.com/watch?v=Zy_T9lhhPCw
• Python: biblioteki (xml, json, sql, ...) – https://www.youtube.com/watch?v=kcHf4l66QbA
8 Literatura dodatkowa 🤓
• The Python Tutorial (https://docs.python.org/3/tutorial/) - oficjalny Tutorial Pythona.
• Biblioteka Riklaunima: Podstawy Pythona (http://www.python.rk.edu.pl/w/p/podstawy/).
• A Byte of Python (https://python.swaroopch.com/).
• How to Think Like a Computer Scientist: Learning with Python 3 (http://openbookproject.ne t/thinkcs/python/english3e/).
• Zanurkuj w Pythonie (https://pl.wikibooks.org/wiki/Zanurkuj_w_Pythonie).
9 Zadania
Informacja
Często w zadaniach programistycznych i zawsze w ramach tego kursu jeżeli jest powiedziane:
• „napisz funkcję” to znaczy że ma zostać napisana funkcja, a nie jedynie kod programu, który mógłby stanowić wnętrze (ciało) tej funkcji,
• „napisz program” to znaczy że ma zostać napisany pełny kod programu realizujący podane czynności,
• „napisz pętlę/warunek/...” to znaczy że wystarczy napisać sam kod pętli, warunku, innej konstrukcji (ale nie tylko jego wnętrze, lecz kod całej żądanej konstrukcji składniowej),
• „napisz funkcję przyjmującą napis” to znaczy że funkcja ma mieć argument, który będzie traktowany jako napis (nie oznacza to że wymaga się wczytania tego napisu „z klawiatury”a),
• „napisz funkcję zwracającą X” to znaczy że funkcja ma zwrócić (poprzez return) wartość określoną przez X (nie ma jej wypisywać na ekran),
• „napisz funkcję wypisującą X” to znaczy że funkcja ma wypisać na ekran (standardowe wyjście) wartość określoną przez X,
a. Powszechnie używane w nauce programowania wczytywanie danych „z klawiatury” / odpytywanie użytkownika o kolejne parametry na ogół nie jest najlepszym rozwiązaniem programistycznym, o tym dlaczego dowiesz się w dalszych częściach tego kursu
9.1 konstrukcje składniowe
Zadanie 9.1.1
Napisz funkcję, która przyjmuje dwa argumenty i zwraca ich sumę. Użyj jej do obliczenia (oraz wypisania na konsolę) wartości kilku różnych sum.
Wskazówka: print() powinien być użyty na zewnątrz tej funkcji.
Zadanie 9.1.2
Napisz program obliczający sumę 12 + 22+ 32+ … + 992 + 1002.
Zadanie 9.1.3
Napisz funkcję znak(liczba) która wypiszę informację o znaku podanej liczby (wyróżniając zero) i zwróci jej wartość bezwzględną. Wywołanie funkcji znak powinno wyglądać następująco:
a = znak(7) b = znak(-13) c = znak(0) print(a, b, c)
7 jest dodatnia -13 jest ujemna 0 to zero
7 13 0
Zadanie 9.1.4
Rozwiąż zadanie 9.1.2 stosując pętlę while.
9.2 napisy
Zadanie 9.2.1
Napisz funkcję, która dla danej listy słów wypisze każde słowo z listy wspak. Np. dla listy ['Ala', 'ma', 'kota'] funkcja powinna wypisać:
alAam atok
Wskazówka: Po elementach listy znajdującej się w zmiennej możemy iterować pętlą for, tak jak robiliśmy to po literach napisu, czy po elementach listy liczb zapisanej bezpośrednio w konstrukcji pętli (spróbuj for x in lista:).
Zadanie 9.2.2
Napisz funkcję wyiksuj(napis), która zwróci dany napis, zastępując każdą małą literę przez x i każdą wielką literę przez X, natomiast resztę znaków pozostawi bez zmian. Np. dla napisu 'Py-thon 3.6.1 (default, Dec 2015, 13:05:11)' funkcja powinna zwrócić napis: Xxxxxx 3.6.1 (xxxxxxx, Xxx 2015, 13:05:11)
Zadanie 9.2.3
Napisz program dekodujący napis kodowany w UTF8 zakodowany przy pomocy base64 mający po-stać: b'UHl0aG9uIGplc3QgZmFqbnkg8J+Yjg==\n'.
Wskazówka: dane wejściowe funkcji decode() muszą być typu ”bytes”, można to uzyskać poprze-dzając napis prefiksem b, tak jak powyżej.
9.3 wyrażenia regularne
Zadanie 9.3.1
Napisz funkcję która sprawdzi z użyciem wyrażeń regularnych czy dany napis jest słowem (tzn. nie zawiera spacji).
Zadanie 9.3.2
Napisz funkcję która sprawdzi z użyciem wyrażeń regularnych czy dany napis jest liczbą (tzn. jest złożony z cyfr i kropki, a na początku może wystąpić + albo -).
9.4 zmienne i ich typy
Zadanie 9.4.1
Zapoznaj się z dokumentacją klasy odpowiedzialnej za napisy (str), zwróć szczególną uwagę na metody split, find, replace. Korzystając z metod klasy str napisz funkcję parse która dla napisu będącego jej argumentem wykona zamianę wszystkich ciągów ”XY” na spację oraz dokona rozbicia napisu złożonego z pól rozdzielanych dwukropkiem na listę napisów odpowiadających poszczególnym polom. Funkcja powinna działać w następujący sposób:
> l = parse("Ala:maXYkota:i inne:zwierzeta")
> print(l)
['Ala', 'ma kota', 'i inne', 'zwierzeta']
Zadanie 9.4.2
Napisz funkcję zlicz która dla podanej listy policzy powtórzenia jej elementów. Przykład użycia:
> zlicz(["AX", "B", "AX"]) AX wystepuje 2 razy
B wystepuje 1 razy
Wskazówka: Użyj słownika, w którym element będzie stanowił klucz, a krotność jego wystąpień wartość. Możesz użyć metody get() do pobierania wartości z słownika, jeżeli w nim jest lub wartości domyślnej w przeciwnym wypadku - szczegóły zobacz w dokumentacji
Zadanie 9.4.3
Napisz funkcję która przyjmuje dwa argumenty: listę oraz funkcję. Funkcja ma za zadanie wykonać przekazaną do niej funkcję na każdym elemencie listy. Przykład użycia:
>>> wykonaj([1,2,3], print) 12
3
Zadanie 9.4.4
Zastanów się czy konstrukcję if/elif w funkcji dzialanie() z rozdziału 4.4 można by zastąpić słow-nikiem, jak to ewentualnie zrobić i jakie mogłoby mieć to zalety bądź wady?
9.5 fork i pliki
Zadanie 9.5.1
Napisz funkcję, który wczytuje dane z standardowego wejścia. Funkcja powinna przyjmować jeden argument określający maksymalny czas oczekiwania na kolejną porcję danych. Każde pojawienie się danych wejściowych powinno resetować odliczanie timeoutu podanego w argumencie. Po skutecznym upływie tego timeoutu funkcja powinna zwrócić wszystkie wczytane dane.
Wskazówka: zmodyfikuj przykład użycia funkcji select() podany w skrypcie.
Zadanie 9.5.2
Napisz program który utworzy 1 potomka, rodzić powinien wypisać PID potomka i swój. Natomiast potomek powinien utworzyć kolejny proces w którym zostanie uruchomiona komenda ps -f w taki sposób aby potomek odebrał do zmiennej jej standardowe wyjście i wypisał je na ekran.
Zadanie 9.5.3
Napisz funkcję zapisz która przyjmuje dwa argumenty: słownik oraz nazwę pliku. Funkcja ma utworzyć plik o podanej nazwie i zapisać do niego otrzymany słownik, w taki sposób że każda linii odpowiada jednej parze klucz wartość, a separatorem pomiędzy kluczem a wartością jest znak tabulacji. Dla uproszczenia zakładamy że elementy słownika są napisami (zarówno klucze jak i wartości) i nie zawierają znaków nowej linii ani tabulacji.
Na przykład dla wywołania zapisz({"a": "qwe", "d": "123"}, "xx") funkcja powinna utwo-rzyć plik z zawartością:
a qwe
d 123