Add files
This commit is contained in:
commit
51c89cec1a
205
00_czysty_kod.ipynb
Normal file
205
00_czysty_kod.ipynb
Normal file
@ -0,0 +1,205 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Czysty kod"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Gorąco zachęcam do przeczytania książki: Czysty kod. Podręcznik dobrego programisty"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Co to znaczy \"czysty kod\"?\n",
|
||||
"\n",
|
||||
"Czysty kod to taki zapis kodu, który będzie czytelny/przyjazny dla innych osób (lub samego siebie przy powrocie do danego kodu po kilku miesiącach przerwy)\n",
|
||||
"\n",
|
||||
"Czysty kod powinien być:\n",
|
||||
"* poprawnie sformatowany (dla chętnych dokument PEP 8 opisujący formatowanie kodu w Pythonie https://peps.python.org/pep-0008/)\n",
|
||||
"* samoopisywalny - nazwy zmiennych/funkcji powinny opisywać, co dzieje się w danym fragmencie kodu\n",
|
||||
"* możliwie krótki i prosty (brak wielokrotnych zagnieżdżeń, wielu różnych wariantów w blokach if-elif-else itp.)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**1. Nazwy:**\n",
|
||||
"\n",
|
||||
"* **Znaczące i opisowe:** Nazwy zmiennych, funkcji i klas powinny jasno wskazywać ich przeznaczenie (czyli definiować, z czym mamy doczynienia). Krótka nazwa to nie zawsze dobra nazwa! Przykłady:\n",
|
||||
" * `words` zamiast `w`\n",
|
||||
" * `number_of_ill_patients` jako liczba chorych pacjentów. Jeśli chcielibyśmy przetrzymywać listę/zbiór chorych pacjentów (obiektów posiadających informacje o pacjentach), wtedy możemy skorzystać ze zmiennej `ill_patients`.\n",
|
||||
" * `calculate_sum()` zamiast `calc()`\n",
|
||||
" * nazwy takie jak `x` czy `y` możemy wykorzystywać w takich zastosowaniach jak indeks podczas iterowania pętli\n",
|
||||
"* **Konwencja:** Używaj `snake_case` dla nazw zmiennych i funkcji (małe litery, podkreślenia). Klasy piszemy w `CamelCase` (duże litery na początku każdego słowa).\n",
|
||||
"* **Unikaj skrótów:** `unique_elements` zamiast `uni_elem`, wyjątek stanowią skróty, które są jednoznaczne, powszechnie przyjęte i rozumiane przez zdecydowaną większość osób mających styczność z kodem (np. number -> num, dataframe -> df, vocabulary -> vocab, character -> char).\n",
|
||||
"\n",
|
||||
"**2. Formatowanie:**\n",
|
||||
"\n",
|
||||
"* **Wcięcia:** Używaj 4 spacji na każde wcięcie.\n",
|
||||
"* **Puste linie:** Oddzielaj bloki kodu pustymi liniami dla lepszej czytelności (funkcje, klasy, oraz fragmenty kodu staniowące pewną logiczną spójność).\n",
|
||||
"* **Długość linii:** Staraj się, aby linie kodu nie były dłuższe niż 80 znaków.\n",
|
||||
"\n",
|
||||
"**3. Funkcje:**\n",
|
||||
"\n",
|
||||
"* **Jedno zadanie:** Każda funkcja powinna wykonywać tylko jedno, konkretne zadanie.\n",
|
||||
"* **Krótkie i zwięzłe:** Funkcje powinny być krótkie i łatwe do zrozumienia (tak samo ich nazwy).\n",
|
||||
"\n",
|
||||
"**4. Komentarze:**\n",
|
||||
"* **Podstawowa zasada:** W komentarzu umieszczaj informacje, których nie da się wyrazić w kodzie, a które są ważne. \n",
|
||||
"* **Unikaj nadmiaru komentarzy:** Zbyt wiele komentarzy może utrudnić czytanie kodu.\n",
|
||||
"\n",
|
||||
"**5. Moduły i pakiety:**\n",
|
||||
"\n",
|
||||
"* **Organizacja:** Dziel duży kod na mniejsze moduły i pakiety, aby ułatwić jego zarządzanie.\n",
|
||||
"* **Import:** Importuj tylko niezbędne moduły.\n",
|
||||
"\n",
|
||||
"**Narzędzia:**\n",
|
||||
"\n",
|
||||
"* **Linters:** Używaj linterów, takich jak `pylint` lub `flake8`, aby automatycznie sprawdzać styl i jakość kodu.\n",
|
||||
"* **Formatery:** Używaj formaterów kodu, takich jak `black` lub `autopep8`, aby automatycznie formatować kod zgodnie z ustalonymi konwencjami.\n",
|
||||
"\n",
|
||||
"**Pamiętaj:** Celem czystego kodu jest jego zrozumienie i utrzymanie. Inwestycja w czysty kod zaoszczędzi Ci (oraz Twoim współpracownikom) czasu i wysiłku w przyszłości."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Przykład nieczytelnego kodu"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"with open(\"file1.txt\", \"r\") as f:\n",
|
||||
" b = f.readlines()\n",
|
||||
" b = [x.strip() for x in b]\n",
|
||||
" b = set(b)\n",
|
||||
"with open(\"file2.txt\", \"r\") as f:\n",
|
||||
" a = f.readlines()\n",
|
||||
" a = [x.strip() for x in a]\n",
|
||||
" a = \" \".join(a)\n",
|
||||
"a = a.split()\n",
|
||||
"\n",
|
||||
"aa = []\n",
|
||||
"for a1 in a:\n",
|
||||
"\n",
|
||||
" aaa = \"\".join([c for c in a1 if c.isalpha()])\n",
|
||||
" aa.append(aaa)\n",
|
||||
"o = []\n",
|
||||
"for a2 in aa:\n",
|
||||
" if a2 not in b:\n",
|
||||
" o.append(a2)\n",
|
||||
" \n",
|
||||
"print(o)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Przykład wyżej po poprawie"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def remove_nonletters_chars(words):\n",
|
||||
" filtered_words = []\n",
|
||||
"\n",
|
||||
" for word in words:\n",
|
||||
" filtered_word = \"\".join([char for char in word if char.isalpha()])\n",
|
||||
" filtered_words.append(filtered_word)\n",
|
||||
" \n",
|
||||
" return filtered_words\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"def get_out_of_vocab_words(text, vocab):\n",
|
||||
" words = text.split()\n",
|
||||
" words = remove_nonletters_chars(words)\n",
|
||||
"\n",
|
||||
" out_of_vocab_words = []\n",
|
||||
" for word in words:\n",
|
||||
" if word not in vocab:\n",
|
||||
" out_of_vocab_words.append(word)\n",
|
||||
" \n",
|
||||
" return out_of_vocab_words"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"a\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"with open(\"vocabulary.txt\", \"r\") as file:\n",
|
||||
" vocab = file.readlines()\n",
|
||||
" vocab = [x.strip() for x in vocab]\n",
|
||||
" vocab = set(vocab)\n",
|
||||
"\n",
|
||||
"with open(\"article.txt\", \"r\") as file:\n",
|
||||
" article = file.readlines()\n",
|
||||
" article = [x.strip() for x in article]\n",
|
||||
" article = \" \".join(article)\n",
|
||||
"\n",
|
||||
"out_of_vocab_words = get_out_of_vocab_words(article, vocab)\n",
|
||||
"print(out_of_vocab_words)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"#### W powyższym kodzie:\n",
|
||||
"* zmienne jednoznacznie wskazują \"czym\" są\n",
|
||||
"* nazwy funkcji opisują co w nich jest wykonywane\n",
|
||||
"* fragmenty kodu są właściwie oddzielone nowymi liniami\n",
|
||||
"* kod nie zawiera komentarzy, ponieważ strukturę działania programu dało się wyrazić poprzez nadanie właściwych nazw ziennym oraz funkcjom"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.11.5"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
96
sprawy_organizacyjne.ipynb
Normal file
96
sprawy_organizacyjne.ipynb
Normal file
@ -0,0 +1,96 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Informacje ogólne"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Prowadzący\n",
|
||||
"\n",
|
||||
"mgr Ryszard Staruch\n",
|
||||
"\n",
|
||||
"Kontakt: mail (ryssta@amu.edu.pl) lub przez Teamsy\n",
|
||||
"\n",
|
||||
"Dużury: wtorek 10:00-11:30 (możliwe inne terminy)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## Literatura\n",
|
||||
"Polecana literatura do przedmiotu:\n",
|
||||
"\n",
|
||||
"- Koehn, P. (2009). Statistical Machine Translation. Cambridge: Cambridge University Press. doi:10.1017/CBO9780511815829\n",
|
||||
"- Philipp Koehn. \"Neural Machine Translation\". 2020.\n",
|
||||
"- https://web.stanford.edu/~jurafsky/slp3/3.pdf\n",
|
||||
"- Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova. 2019. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. North American Association for Computational Linguistics (NAACL).\n",
|
||||
"- Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena, Yanqi Zhou, Wei Li, Peter J. Liu. 2020. Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. Journal of Machine Learning Research vol 21, number 140, pages 1-67.\n",
|
||||
"- Radford, Alec and Wu, Jeff and Child, Rewon and Luan, David and Amodei, Dario and Sutskever, Ilya. 2019. Language Models are Unsupervised Multitask Learners\n",
|
||||
"- https://jalammar.github.io/illustrated-transformer/\n",
|
||||
"- https://www.youtube.com/watch?v=-9evrZnBorM&ab_channel=YannicKilcher\n",
|
||||
"- https://www.youtube.com/watch?v=u1_qMdb0kYU&ab_channel=YannicKilcher\n",
|
||||
"- Kursy Andrewa Ng na Courserze\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## Laboratorium \n",
|
||||
"\n",
|
||||
"Podstawą do zaliczenia laboratorium jest uzyskanie odpowiedniej liczby punktów. Liczba punktów jest jedynym kryterium oceny końcowej. \n",
|
||||
"\n",
|
||||
"Punkty otrzymuje się za rozwiązanie zadań podanych przez prowadzącego oraz projekt końcowy. \n",
|
||||
"\n",
|
||||
"### Zadania ćwiczeniowe (laboratoria 2 – 6 oraz 8 – 12) \n",
|
||||
"\n",
|
||||
"Zadania ćwiczeniowe studenci wykonują podczas laboratoriów 2 – 6 oraz 8 – 12. Celem każdego laboratorium jest nabycie umiejętności praktycznego wykorzystania wiedzy poznanej podczas poprzedzającego wykładu. Podczas jednych zajęć rozwiązuje się od jednego do kilku zadań. Termin oddania zadań mija w najbliższy wtorek o godzinie 23:59 po danych zajęciach (czyli dla zajęć z 9 października termin oddania zadań przypada na 15 października 23:59). \n",
|
||||
"\n",
|
||||
"Maksymalna liczba punktów do uzyskania za zadania na jednych zajęciach wynosi: **40**. Warunkiem koniecznym dla zdobycia maksymalnej liczby punktów jest obecność na zajęciach. \n",
|
||||
"\n",
|
||||
"W przypadku nieobecności na zajęciach student ma prawo wykonać zadania i oddać je w terminie uzgodnionym z prowadzącym. Maksymalna liczba punktów do uzyskania wynosi wtedy: **20**. \n",
|
||||
"\n",
|
||||
"### Zadanie projektowe (laboratoria 7 oraz 13 – 15) \n",
|
||||
"\n",
|
||||
"Laboratoria nr 7 będą poświęcone podzieleniu się na zespoły oraz przygotowanie/przedyskutowanie kwestii zadania projektowego.\n",
|
||||
"\n",
|
||||
"Studenci dobierają się w grupy 2 osobowe (w przypadku nieparzystej liczby osób w grupie 1 zespół musi być 3 osobowy) i przedstawiają propozycję projektu najpóźniej do zajęć nr 12 włącznie (zajęcia nr 12 wypadają 18 grudnia 2024). Nie ma możliwości samodzielnego wykonania projektu. \n",
|
||||
"\n",
|
||||
"Wykonanie projektu polega na stworzeniu programu/systemu (zgodnie z ustalonym tematem projektu) oraz przygotowaniu i przedstawieniu prezentacji (czas trwania 5-10 minut) na zajęciach nr 14 i 15. \n",
|
||||
"\n",
|
||||
"Dokładny termin prezentacji każdego zespołu zostanie ustalony wspólnie z prowadzącym. \n",
|
||||
"\n",
|
||||
"Oceniana będzie kreatywność/oryginalność projektu, wykonanie projektu oraz odpowiednie zaprezentowanie projektu. \n",
|
||||
"\n",
|
||||
"Maksymalna sumaryczna liczba punktów do zdobycia za zadanie projektowe wynosi 200 punktów. \n",
|
||||
"\n",
|
||||
"Część techniczna projektu (kod źródłowy/przykładowe dane) musi zostać przekazana prowadzącemu w formie umożliwiającej bezproblemowe uruchomienie projektu. \n",
|
||||
"\n",
|
||||
"\n",
|
||||
"Przelicznik punktów na ocenę:\n",
|
||||
"* 0-299 — 2\n",
|
||||
"* 300-349 — 3\n",
|
||||
"* 350-399 — 3+\n",
|
||||
"* 400-449 — 4\n",
|
||||
"* 450-499 — 4+\n",
|
||||
"* 500+ — 5\n",
|
||||
"\n",
|
||||
"Technicznie rozwiązania zadań zgłaszamy na platformie Teams.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"Łącznie (za zadania oraz projekt) do zdobycia będzie 600 punktów.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## Obecność na zajęciach\n",
|
||||
"\n",
|
||||
"Obecność na zajęciach jest **obowiązkowa**. Nieobecność może być usprawiedliwiona w przypadku choroby potwierdzonej zwolnieniem lekarskim. Dopuszczalne są maksymalnie 3 nieusprawiedliwione nieobecności."
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
Loading…
Reference in New Issue
Block a user