|
| 1 | +# Пісочниця та шпаргалка для вивчення Python |
| 2 | + |
| 3 | +> 🇺🇦 УКРАЇНА [ЗАЗНАЄ ЗБРОЙНОЇ АГРЕСІЇ](https://war.ukraine.ua/) З БОКУ РОСІЙСЬКОЇ АРМІЇ. ГИНУТЬ МИРНІ ЖИТЕЛІ. ЖИТЛОВІ КВАРТАЛИ ЗАЗНАЮТЬ БОМБАРДУВАНЬ. |
| 4 | +> - Допоможіть Україні: |
| 5 | +> - [Благодійний фонд Сергія Притули](https://prytulafoundation.org/en/) |
| 6 | +> - [Благодійний фонд «Повернись живим»](https://savelife.in.ua/donate/) |
| 7 | +> - [Національний банк України](https://bank.gov.ua/ua/news/all/natsionalniy-bank-vidkriv-spetsrahunok-dlya-zboru-koshtiv-na-potrebi-armiyi) |
| 8 | +> - Більше інформації на [war.ukraine.ua](https://war.ukraine.ua/) та [МЗС України](https://twitter.com/MFA_Ukraine) |
| 9 | +
|
| 10 | +<hr/> |
| 11 | + |
| 12 | +[](https://travis-ci.org/trekhleb/learn-python) |
| 13 | + |
| 14 | +> Це колекція скриптів мовою Python, розподілених за [темами](#зміст), що містять приклади коду з поясненнями, різними варіантами використання та посиланнями на додаткові матеріали. |
| 15 | +
|
| 16 | +> _Читати іншими мовами:_ [_English_](README.md), [_Português_](README.pt-BR.md), [_Español_](README.es-ES.md), [_繁體中文_](README.zh-TW.md). |
| 17 | +
|
| 18 | +Це **пісочниця**, тому що ви можете змінювати або доповнювати код, щоб побачити, як він працює, і [тестувати його](#тестування-коду) за допомогою тверджень. Також ви можете [перевіряти код](#перевірка-коду), який ви написали, і з'ясувати, чи відповідає він настановам зі стилю Python. Усе це може зробити процес навчання інтерактивнішим і допоможе підтримувати високу якість коду від самого початку. |
| 19 | + |
| 20 | +Це **шпаргалка**, тому що ви можете повертатися до цих прикладів коду щоразу, коли захочете повторити синтаксис [стандартних інструкцій і конструкцій Python](#зміст). А оскільки код містить багато тверджень, ви зможете бачити очікуваний результат функцій та виразів одразу, без їх запуску. |
| 21 | + |
| 22 | +> _Вас також може зацікавити 🤖 [Interactive Machine Learning Experiments](https://github.com/trekhleb/machine-learning-experiments)_ |
| 23 | +
|
| 24 | +## Як користуватися цим репозиторієм |
| 25 | + |
| 26 | +Кожен скрипт Python у цьому репозиторії має таку структуру: |
| 27 | + |
| 28 | +```python |
| 29 | +"""Lists <--- Назва теми |
| 30 | +
|
| 31 | +# @see: https://www.learnpython.org/en/Lists <-- Посилання на додаткові матеріали |
| 32 | +
|
| 33 | +Тут може бути детальніше пояснення поточної теми (наприклад, загальна інформація про списки). |
| 34 | +""" |
| 35 | + |
| 36 | + |
| 37 | +def test_list_type(): |
| 38 | + """Пояснення підтеми. |
| 39 | +
|
| 40 | + Кожен файл містить тестові функції, які ілюструють підтеми (наприклад, тип списку, методи списків). |
| 41 | + """ |
| 42 | + |
| 43 | + # Ось приклад побудови списку. <-- Коментарі пояснюють дію |
| 44 | + squares = [1, 4, 9, 16, 25] |
| 45 | + |
| 46 | + # Списки можна індексувати та зрізати (sliced). |
| 47 | + # Індексування повертає елемент. |
| 48 | + assert squares[0] == 1 # <-- Твердження ілюструють результат. |
| 49 | + # Зрізання повертає новий список. |
| 50 | + assert squares[-3:] == [9, 16, 25] # <-- Твердження ілюструють результат. |
| 51 | +``` |
| 52 | + |
| 53 | +Зазвичай ви можете зробити наступне: |
| 54 | + |
| 55 | +- [Знайти тему](#зміст), яку хочете вивчити або повторити. |
| 56 | +- Прочитати коментарі та/або документацію, на яку є посилання в docstring кожного скрипта (як у прикладі вище). |
| 57 | +- Переглянути приклади коду та твердження, щоб побачити варіанти використання й очікуваний результат. |
| 58 | +- Змінити код або додати нові твердження, щоб побачити, як усе працює. |
| 59 | +- [Запустити тести](#тестування-коду) та [перевірити код](#перевірка-коду), щоб переконатися, що він працює і написаний правильно. |
| 60 | + |
| 61 | +## Зміст |
| 62 | + |
| 63 | +1. **Початок роботи** |
| 64 | + - [Що таке Python](src/getting_started/what_is_python.uk-UA.md) |
| 65 | + - [Синтаксис Python](src/getting_started/python_syntax.uk-UA.md) |
| 66 | + - [Змінні](src/getting_started/test_variables.py) |
| 67 | +2. **Оператори** |
| 68 | + - [Арифметичні оператори](src/operators/test_arithmetic.py) (`+`, `-`, `*`, `/`, `//`, `%`, `**`) |
| 69 | + - [Побітові оператори](src/operators/test_bitwise.py) (`&`, `|`, `^`, `>>`, `<<`, `~`) |
| 70 | + - [Оператори присвоєння](src/operators/test_assigment.py) (`=`, `+=`, `-=`, `/=`, `//=` тощо) |
| 71 | + - [Оператори порівняння](src/operators/test_comparison.py) (`==`, `!=`, `>`, `<`, `>=`, `<=`) |
| 72 | + - [Логічні оператори](src/operators/test_logical.py) (`and`, `or`, `not`) |
| 73 | + - [Оператори ідентичності](src/operators/test_identity.py) (`is`, `is not`) |
| 74 | + - [Оператори належності](src/operators/test_membership.py) (`in`, `not in`) |
| 75 | +3. **Типи даних** |
| 76 | + - [Числа](src/data_types/test_numbers.py) (включно з булевими значеннями) |
| 77 | + - [Рядки](src/data_types/test_strings.py) та їхні методи |
| 78 | + - [Списки](src/data_types/test_lists.py) та їхні методи (включно з генераторами списків) |
| 79 | + - [Кортежі](src/data_types/test_tuples.py) |
| 80 | + - [Множини](src/data_types/test_sets.py) та їхні методи |
| 81 | + - [Словники](src/data_types/test_dictionaries.py) |
| 82 | + - [Перетворення типів](src/data_types/test_type_casting.py) |
| 83 | +4. **Керування потоком виконання** |
| 84 | + - [Інструкція `if`](src/control_flow/test_if.py) |
| 85 | + - [Інструкція `for`](src/control_flow/test_for.py) (і функція `range()`) |
| 86 | + - [Інструкція `while`](src/control_flow/test_while.py) |
| 87 | + - [Інструкція `try`](src/control_flow/test_try.py) |
| 88 | + - [Інструкція `break`](src/control_flow/test_break.py) |
| 89 | + - [Інструкція `continue`](src/control_flow/test_continue.py) |
| 90 | +5. **Функції** |
| 91 | + - [Визначення функції](src/functions/test_function_definition.py) (інструкції `def` і `return`) |
| 92 | + - [Області видимості змінних у функціях](src/functions/test_function_scopes.py) (інструкції `global` і `nonlocal`) |
| 93 | + - [Стандартні значення аргументів](src/functions/test_function_default_arguments.py) |
| 94 | + - [Іменовані аргументи](src/functions/test_function_keyword_arguments.py) |
| 95 | + - [Довільні списки аргументів](src/functions/test_function_arbitrary_arguments.py) |
| 96 | + - [Розпакування списків аргументів](src/functions/test_function_unpacking_arguments.py) (інструкції `*` і `**`) |
| 97 | + - [Лямбда-вирази](src/functions/test_lambda_expressions.py) (інструкція `lambda`) |
| 98 | + - [Рядки документації](src/functions/test_function_documentation_string.py) |
| 99 | + - [Анотації функцій](src/functions/test_function_annotations.py) |
| 100 | + - [Декоратори функцій](src/functions/test_function_decorators.py) |
| 101 | +6. **Класи** |
| 102 | + - [Визначення класу](src/classes/test_class_definition.py) (інструкція `class`) |
| 103 | + - [Об'єкти класу](src/classes/test_class_objects.py) |
| 104 | + - [Об'єкти екземплярів](src/classes/test_instance_objects.py) |
| 105 | + - [Об'єкти методів](src/classes/test_method_objects.py) |
| 106 | + - [Змінні класу та екземпляра](src/classes/test_class_and_instance_variables.py) |
| 107 | + - [Успадкування](src/classes/test_inheritance.py) |
| 108 | + - [Множинне успадкування](src/classes/test_multiple_inheritance.py) |
| 109 | +7. **Модулі** |
| 110 | + - [Модулі](src/modules/test_modules.py) (інструкція `import`) |
| 111 | + - [Пакети](src/modules/test_packages.py) |
| 112 | +8. **Помилки та винятки** |
| 113 | + - [Обробка винятків](src/exceptions/test_handle_exceptions.py) (інструкція `try`) |
| 114 | + - [Генерування винятків](src/exceptions/test_raise_exceptions.py) (інструкція `raise`) |
| 115 | +9. **Файли** |
| 116 | + - [Читання та записування](src/files/test_file_reading.py) (інструкція `with`) |
| 117 | + - [Методи файлових об'єктів](src/files/test_file_methods.py) |
| 118 | +10. **Додатково** |
| 119 | + - [Інструкція `pass`](src/additions/test_pass.py) |
| 120 | + - [Генератори](src/additions/test_generators.py) (інструкція `yield`) |
| 121 | +11. **Короткий огляд стандартних бібліотек** |
| 122 | + - [Серіалізація](src/standard_libraries/test_json.py) (бібліотека `json`) |
| 123 | + - [Шаблони пошуку файлів](src/standard_libraries/test_glob.py) (бібліотека `glob`) |
| 124 | + - [Пошук за шаблоном у рядках](src/standard_libraries/test_re.py) (бібліотека `re`) |
| 125 | + - [Математика](src/standard_libraries/test_math.py) (бібліотеки `math`, `random`, `statistics`) |
| 126 | + - [Дата і час](src/standard_libraries/test_datetime.py) (бібліотека `datetime`) |
| 127 | + - [Стиснення даних](src/standard_libraries/test_zlib.py) (бібліотека `zlib`) |
| 128 | +12. **Введення користувача** |
| 129 | + - [Введення з терміналу](src/user_input/test_input.py) (інструкція `input`) |
| 130 | + |
| 131 | +## Передумови |
| 132 | + |
| 133 | +**Встановлення Python** |
| 134 | + |
| 135 | +Переконайтеся, що на вашому комп'ютері [встановлено Python 3](https://realpython.com/installing-python/). |
| 136 | + |
| 137 | +Ви можете використовувати стандартну бібліотеку Python [venv](https://docs.python.org/3/library/venv.html) для створення віртуальних середовищ, щоб Python, pip та всі залежні пакети встановлювалися й працювали з локальної теки проєкту, а не впливали на системні пакети та їхні версії. |
| 138 | + |
| 139 | +Залежно від вашої інсталяції, доступ до інтерпретатора Python 3 можна отримати, виконавши команду `python` або `python3`. Те саме стосується менеджера пакетів pip — він може бути доступний через `pip` або `pip3`. |
| 140 | + |
| 141 | +Перевірити версію Python можна, виконавши: |
| 142 | + |
| 143 | +```bash |
| 144 | +python --version |
| 145 | +``` |
| 146 | + |
| 147 | +Зверніть увагу, що в цьому репозиторії, коли ви бачите `python`, мається на увазі Python **3**. |
| 148 | + |
| 149 | +**Встановлення залежностей** |
| 150 | + |
| 151 | +Встановіть усі необхідні залежності проєкту, виконавши: |
| 152 | + |
| 153 | +```bash |
| 154 | +pip install -r requirements.txt |
| 155 | +``` |
| 156 | + |
| 157 | +## Тестування коду |
| 158 | + |
| 159 | +Тести написані з використанням фреймворку [pytest](https://docs.pytest.org/en/latest/). |
| 160 | + |
| 161 | +Ви можете додавати власні тести, створюючи файли та функції з префіксом `test_` (наприклад, `test_topic.py` з функцією `def test_sub_topic()` всередині). |
| 162 | + |
| 163 | +Щоб запустити всі тести, виконайте з кореневої теки проєкту: |
| 164 | + |
| 165 | +```bash |
| 166 | +pytest |
| 167 | +``` |
| 168 | + |
| 169 | +Щоб запустити окремі тести, виконайте: |
| 170 | + |
| 171 | +```bash |
| 172 | +pytest ./path/to/the/test_file.py |
| 173 | +``` |
| 174 | + |
| 175 | +## Перевірка коду |
| 176 | + |
| 177 | +Перевірка коду виконується за допомогою бібліотек [pylint](http://pylint.pycqa.org/) та [flake8](http://flake8.pycqa.org/en/latest/). |
| 178 | + |
| 179 | +### PyLint |
| 180 | + |
| 181 | +Щоб перевірити, чи написаний код відповідно до настанов зі стилю [PEP 8](https://www.python.org/dev/peps/pep-0008/), виконайте: |
| 182 | + |
| 183 | +```bash |
| 184 | +pylint ./src/ |
| 185 | +``` |
| 186 | + |
| 187 | +Якщо лінтер виявить помилку (наприклад, `missing-docstring`), ви можете дізнатися про неї більше, виконавши: |
| 188 | + |
| 189 | +```bash |
| 190 | +pylint --help-msg=missing-docstring |
| 191 | +``` |
| 192 | + |
| 193 | +[Детальніше про PyLint](http://pylint.pycqa.org/) |
| 194 | + |
| 195 | +### Flake8 |
| 196 | + |
| 197 | +Щоб перевірити, чи написаний код відповідно до настанов зі стилю [PEP 8](https://www.python.org/dev/peps/pep-0008/), виконайте: |
| 198 | + |
| 199 | +```bash |
| 200 | +flake8 ./src |
| 201 | +``` |
| 202 | + |
| 203 | +Або, якщо ви хочете отримати детальніший вивід: |
| 204 | + |
| 205 | +```bash |
| 206 | +flake8 ./src --statistics --show-source --count |
| 207 | +``` |
| 208 | + |
| 209 | +[Детальніше про Flake8](http://flake8.pycqa.org/en/latest/) |
| 210 | + |
| 211 | +## Автор |
| 212 | + |
| 213 | +- [@trekhleb](https://trekhleb.dev) |
0 commit comments