Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5591222f7f | |||
| 7bac20b5bd | |||
| 8af895cd75 | |||
| e94620ff38 | |||
| c468dc39a8 | |||
| 22fbeb823f | |||
| c36bbde601 | |||
| e316d6e3ea | |||
| 3f41915ab8 |
+220
@@ -0,0 +1,220 @@
|
|||||||
|
# Byte-compiled / optimized / DLL files
|
||||||
|
__pycache__/
|
||||||
|
*.py[codz]
|
||||||
|
*$py.class
|
||||||
|
|
||||||
|
# C extensions
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Distribution / packaging
|
||||||
|
.Python
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
wheels/
|
||||||
|
share/python-wheels/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
MANIFEST
|
||||||
|
|
||||||
|
# PyInstaller
|
||||||
|
# Usually these files are written by a python script from a template
|
||||||
|
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||||
|
*.manifest
|
||||||
|
*.spec
|
||||||
|
|
||||||
|
# Installer logs
|
||||||
|
pip-log.txt
|
||||||
|
pip-delete-this-directory.txt
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
.nox/
|
||||||
|
.coverage
|
||||||
|
.coverage.*
|
||||||
|
.cache
|
||||||
|
nosetests.xml
|
||||||
|
coverage.xml
|
||||||
|
*.cover
|
||||||
|
*.py.cover
|
||||||
|
*.lcov
|
||||||
|
.hypothesis/
|
||||||
|
.pytest_cache/
|
||||||
|
cover/
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
*.mo
|
||||||
|
*.pot
|
||||||
|
|
||||||
|
# Django stuff:
|
||||||
|
*.log
|
||||||
|
local_settings.py
|
||||||
|
db.sqlite3
|
||||||
|
db.sqlite3-journal
|
||||||
|
|
||||||
|
# Flask stuff:
|
||||||
|
instance/
|
||||||
|
.webassets-cache
|
||||||
|
|
||||||
|
# Scrapy stuff:
|
||||||
|
.scrapy
|
||||||
|
|
||||||
|
# Sphinx documentation
|
||||||
|
docs/_build/
|
||||||
|
|
||||||
|
# PyBuilder
|
||||||
|
.pybuilder/
|
||||||
|
target/
|
||||||
|
|
||||||
|
# Jupyter Notebook
|
||||||
|
.ipynb_checkpoints
|
||||||
|
|
||||||
|
# IPython
|
||||||
|
profile_default/
|
||||||
|
ipython_config.py
|
||||||
|
|
||||||
|
# pyenv
|
||||||
|
# For a library or package, you might want to ignore these files since the code is
|
||||||
|
# intended to run in multiple environments; otherwise, check them in:
|
||||||
|
# .python-version
|
||||||
|
|
||||||
|
# pipenv
|
||||||
|
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||||
|
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||||
|
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||||
|
# install all needed dependencies.
|
||||||
|
# Pipfile.lock
|
||||||
|
|
||||||
|
# UV
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
||||||
|
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
||||||
|
# commonly ignored for libraries.
|
||||||
|
# uv.lock
|
||||||
|
|
||||||
|
# poetry
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
||||||
|
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
||||||
|
# commonly ignored for libraries.
|
||||||
|
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
||||||
|
# poetry.lock
|
||||||
|
# poetry.toml
|
||||||
|
|
||||||
|
# pdm
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
||||||
|
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
||||||
|
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
||||||
|
# pdm.lock
|
||||||
|
# pdm.toml
|
||||||
|
.pdm-python
|
||||||
|
.pdm-build/
|
||||||
|
|
||||||
|
# pixi
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
||||||
|
# pixi.lock
|
||||||
|
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
||||||
|
# in the .venv directory. It is recommended not to include this directory in version control.
|
||||||
|
.pixi/*
|
||||||
|
!.pixi/config.toml
|
||||||
|
|
||||||
|
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
||||||
|
__pypackages__/
|
||||||
|
|
||||||
|
# Celery stuff
|
||||||
|
celerybeat-schedule*
|
||||||
|
celerybeat.pid
|
||||||
|
|
||||||
|
# Redis
|
||||||
|
*.rdb
|
||||||
|
*.aof
|
||||||
|
*.pid
|
||||||
|
|
||||||
|
# RabbitMQ
|
||||||
|
mnesia/
|
||||||
|
rabbitmq/
|
||||||
|
rabbitmq-data/
|
||||||
|
|
||||||
|
# ActiveMQ
|
||||||
|
activemq-data/
|
||||||
|
|
||||||
|
# SageMath parsed files
|
||||||
|
*.sage.py
|
||||||
|
|
||||||
|
# Environments
|
||||||
|
.env
|
||||||
|
.envrc
|
||||||
|
.venv
|
||||||
|
env/
|
||||||
|
venv/
|
||||||
|
ENV/
|
||||||
|
env.bak/
|
||||||
|
venv.bak/
|
||||||
|
|
||||||
|
# Spyder project settings
|
||||||
|
.spyderproject
|
||||||
|
.spyproject
|
||||||
|
|
||||||
|
# Rope project settings
|
||||||
|
.ropeproject
|
||||||
|
|
||||||
|
# mkdocs documentation
|
||||||
|
/site
|
||||||
|
|
||||||
|
# mypy
|
||||||
|
.mypy_cache/
|
||||||
|
.dmypy.json
|
||||||
|
dmypy.json
|
||||||
|
|
||||||
|
# Pyre type checker
|
||||||
|
.pyre/
|
||||||
|
|
||||||
|
# pytype static type analyzer
|
||||||
|
.pytype/
|
||||||
|
|
||||||
|
# Cython debug symbols
|
||||||
|
cython_debug/
|
||||||
|
|
||||||
|
# PyCharm
|
||||||
|
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
||||||
|
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
||||||
|
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
||||||
|
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||||
|
# .idea/
|
||||||
|
|
||||||
|
# Abstra
|
||||||
|
# Abstra is an AI-powered process automation framework.
|
||||||
|
# Ignore directories containing user credentials, local state, and settings.
|
||||||
|
# Learn more at https://abstra.io/docs
|
||||||
|
.abstra/
|
||||||
|
|
||||||
|
# Visual Studio Code
|
||||||
|
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
|
||||||
|
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
||||||
|
# and can be added to the global gitignore or merged into this file. However, if you prefer,
|
||||||
|
# you could uncomment the following to ignore the entire vscode folder
|
||||||
|
# .vscode/
|
||||||
|
# Temporary file for partial code execution
|
||||||
|
tempCodeRunnerFile.py
|
||||||
|
|
||||||
|
# Ruff stuff:
|
||||||
|
.ruff_cache/
|
||||||
|
|
||||||
|
# PyPI configuration file
|
||||||
|
.pypirc
|
||||||
|
|
||||||
|
# Marimo
|
||||||
|
marimo/_static/
|
||||||
|
marimo/_lsp/
|
||||||
|
__marimo__/
|
||||||
|
|
||||||
|
# Streamlit
|
||||||
|
.streamlit/secrets.toml
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
### Задача 1. Анализ числовой структуры (Функции и Рекурсия)
|
||||||
|
|
||||||
|
Напишите код из 3 взаимосвязанных функций, который вычисляет сумму всех чисел во вложенных списках.
|
||||||
|
|
||||||
|
1. `check_number(item)` — принимает одно значение `item`; возвращает `True`, если это число (`int` или `float`), и `False` в противном случае.
|
||||||
|
2. `calculate_total_sum(nested_list)` — должна пройтись по элементам списка циклом. Если элемент является списком, функция рекурсивно вызывает саму себя. Если число — прибавляет к общей сумме. Возвращает итоговую сумму.
|
||||||
|
3. `process_data(data, limit)` — принимает список `data` и числовой лимит. Вызывает `calculate_total_sum`. Если итоговая сумма меньше или равна `limit`, возвращает `True`. Если больше — выводит сообщение *"Превышен лимит"* и возвращает `False`.
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
### Задача 2. Анализатор текста (Словари, while и исключения)
|
||||||
|
|
||||||
|
Напишите программу из 3 функций:
|
||||||
|
|
||||||
|
1. `safe_input()` — через цикл `while` запрашивает у пользователя строку. Если строка пустая, выбрасывает `ValueError`, перехватывает его через `try-except`, выводит *"Строка не может быть пустой"* и просит ввести снова. Возвращает введенную строку.
|
||||||
|
2. `count_chars(text)` — принимает строку и возвращает словарь с частотностью каждого символа (пробелы нужно проигнорировать).
|
||||||
|
3. `get_top_tuples(freq_dict)` — принимает словарь частотности, переводит его в список кортежей `(символ, количество)`, сортирует по убыванию количества и возвращает этот список.
|
||||||
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
### Задача 3. Поиск палиндромов (Циклы и Условия)
|
||||||
|
|
||||||
|
Напишите 3 взаимосвязанные функции:
|
||||||
|
|
||||||
|
1. `clean_word(word)` — переводит строку в нижний регистр, убирает пробелы и возвращает её.
|
||||||
|
2. `is_palindrome(word)` — использует `clean_word` и возвращает `True`, если слово читается одинаково слева направо и справа налево.
|
||||||
|
3. `filter_palindromes(words_list)` — принимает список строк, циклом проверяет каждое слово через `is_palindrome` и возвращает список только из палиндромов.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
### Задача 4. Поэма Края (ООП и работа с JSON)
|
||||||
|
|
||||||
|
> **Контекст лора:**
|
||||||
|
> Игрок проделал долгий путь, чтобы достичь конца игры. Теперь он видит слова на экране и слышит голоса из пустоты. Вселенная обращается к нему напрямую. В финале Поэма Края должна связать мысли игрока и послание вселенной воедино, прочитав сакральный текст из внешнего источника.
|
||||||
|
|
||||||
|
**Постановка**
|
||||||
|
|
||||||
|
* **Читатель поэмы:** Имеет имя файла и может читать текст поэмы из JSON-файла.
|
||||||
|
* **Игрок:** Имеет имя и может видеть слова на экране.
|
||||||
|
* **Вселенная:** Имеет имя и может произносить финальное послание.
|
||||||
|
* **Поэма Края:** Содержит читателя, игрока и вселенную; может воспроизводить титры, используя текст из JSON.
|
||||||
|
|
||||||
|
**Задание**
|
||||||
|
|
||||||
|
**Класс `PoemReader`:**
|
||||||
|
|
||||||
|
1. Импортируйте модуль `json`.
|
||||||
|
2. Создайте класс `PoemReader`.
|
||||||
|
3. Создайте метод `__init__(self, filename)`.
|
||||||
|
4. Создайте метод `read_poem(self)`, который открывает JSON-файл на чтение (с кодировкой `utf-8`), преобразует его содержимое в словарь и возвращает значение по ключу `"poem_text"`.
|
||||||
|
|
||||||
|
**Класс `Player`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Player`.
|
||||||
|
2. Создайте метод `__init__(self, name)`.
|
||||||
|
3. Создайте метод `see_words(self)`, который выводит сообщение: *"[Имя] читает наши мысли так, словно это слова на экране."*
|
||||||
|
|
||||||
|
**Класс `Universe`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Universe`.
|
||||||
|
2. Создайте метод `__init__(self)`, определяющий свойство `name` равным `"Вселенная"`.
|
||||||
|
3. Создайте метод `speak(self)`, выводящий фразу: *"И Вселенная говорит тебе: Я люблю тебя."*
|
||||||
|
|
||||||
|
**Класс `EndPoem`:**
|
||||||
|
|
||||||
|
1. Создайте класс `EndPoem`.
|
||||||
|
2. Создайте метод `__init__(self, reader, player, universe)`.
|
||||||
|
3. Создайте метод `play_credits(self)`, который: вызывает чтение текста из JSON, выводит его на экран, а затем вызывает методы игрока и вселенной.
|
||||||
|
|
||||||
|
**Тесты:**
|
||||||
|
|
||||||
|
1. Создайте файл `poem.json` рядом с вашим скриптом, поместив туда словарь с ключом `"poem_text"` и текстом поэмы.
|
||||||
|
2. Создайте объект читателя, передав ему имя файла.
|
||||||
|
3. Создайте объекты игрока и вселенной.
|
||||||
|
4. Создайте объект поэмы и запустите титры.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Задача 5. Библиотека (ООП - Инкапсуляция и Взаимодействие)
|
||||||
|
|
||||||
|
**Постановка**
|
||||||
|
|
||||||
|
* **Книга:** Имеет название, автора и статус (*"В библиотеке"*, *"Выдана"*). Может менять свой статус на противоположный.
|
||||||
|
* **Читатель:** Имеет имя и список взятых книг. Может брать и возвращать книги.
|
||||||
|
* **Библиотека:** Содержит список всех доступных книг. Может выдавать книгу читателю.
|
||||||
|
|
||||||
|
**Задание**
|
||||||
|
|
||||||
|
**Класс `Book`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Book`.
|
||||||
|
2. В `__init__(self, title, author)` определите свойства `title`, `author` и `status` (по умолчанию *"В библиотеке"*).
|
||||||
|
3. Создайте метод `change_status(self)`, меняющий статус книги на *"Выдана"*, если она в библиотеке, и обратно.
|
||||||
|
|
||||||
|
**Класс `Reader`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Reader`.
|
||||||
|
2. В `__init__(self, name)` сохраните имя и создайте пустой список `borrowed_books`.
|
||||||
|
3. Создайте метод `take_book(self, book)`, добавляющий переданную книгу в список.
|
||||||
|
4. Создайте метод `return_book(self, book)`, удаляющий книгу из списка.
|
||||||
|
|
||||||
|
**Класс `Library`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Library`.
|
||||||
|
2. В `__init__(self)` создайте список `books` и добавьте туда несколько книг по умолчанию.
|
||||||
|
3. Создайте метод `lend_book(self, book, reader)`, который проверяет статус книги, меняет его через метод книги на *"Выдана"* и передает читателю в его список.
|
||||||
|
|
||||||
|
**Тесты:**
|
||||||
|
|
||||||
|
1. Создайте библиотеку.
|
||||||
|
2. Создайте читателя.
|
||||||
|
3. Используя библиотеку, выдайте читателю книгу.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Задача 6. Магазин (ООП - Агрегация)
|
||||||
|
|
||||||
|
**Постановка**
|
||||||
|
|
||||||
|
* **Товар:** Имеет название и цену.
|
||||||
|
* **Корзина:** Содержит список товаров. Может добавлять товар и считать общую стоимость.
|
||||||
|
* **Покупатель:** Имеет имя, баланс и корзину. Может оплачивать корзину.
|
||||||
|
|
||||||
|
**Задание**
|
||||||
|
|
||||||
|
**Класс `Product`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Product`.
|
||||||
|
2. Создайте метод `__init__(self, name, price)`.
|
||||||
|
|
||||||
|
**Класс `Cart`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Cart`.
|
||||||
|
2. В `__init__(self)` создайте пустой список `products`.
|
||||||
|
3. Создайте метод `add_product(self, product)`, добавляющий товар в список.
|
||||||
|
4. Создайте метод `get_total(self)`, возвращающий сумму цен всех товаров.
|
||||||
|
|
||||||
|
**Класс `Customer`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Customer`.
|
||||||
|
2. В `__init__(self, name, balance, cart)` сохраните переданные параметры.
|
||||||
|
3. Создайте метод `pay(self)`, который проверяет, хватает ли баланса для оплаты корзины. Если хватает — вычитает сумму из баланса и очищает корзину. Если нет — выводит предупреждение.
|
||||||
|
|
||||||
|
**Тесты:**
|
||||||
|
|
||||||
|
1. Создайте несколько товаров.
|
||||||
|
2. Создайте корзину и добавьте в нее товары.
|
||||||
|
3. Создайте покупателя, передав ему корзину и баланс.
|
||||||
|
4. Заставьте покупателя оплатить товары в корзине.
|
||||||
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,72 @@
|
|||||||
|
### Задача 5. Библиотека (ООП - Инкапсуляция и Взаимодействие)
|
||||||
|
|
||||||
|
**Постановка**
|
||||||
|
|
||||||
|
* **Книга:** Имеет название, автора и статус (*"В библиотеке"*, *"Выдана"*). Может менять свой статус на противоположный.
|
||||||
|
* **Читатель:** Имеет имя и список взятых книг. Может брать и возвращать книги.
|
||||||
|
* **Библиотека:** Содержит список всех доступных книг. Может выдавать книгу читателю.
|
||||||
|
|
||||||
|
**Задание**
|
||||||
|
|
||||||
|
**Класс `Book`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Book`.
|
||||||
|
2. В `__init__(self, title, author)` определите свойства `title`, `author` и `status` (по умолчанию *"В библиотеке"*).
|
||||||
|
3. Создайте метод `change_status(self)`, меняющий статус книги на *"Выдана"*, если она в библиотеке, и обратно.
|
||||||
|
|
||||||
|
**Класс `Reader`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Reader`.
|
||||||
|
2. В `__init__(self, name)` сохраните имя и создайте пустой список `borrowed_books`.
|
||||||
|
3. Создайте метод `take_book(self, book)`, добавляющий переданную книгу в список.
|
||||||
|
4. Создайте метод `return_book(self, book)`, удаляющий книгу из списка.
|
||||||
|
|
||||||
|
**Класс `Library`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Library`.
|
||||||
|
2. В `__init__(self)` создайте список `books` и добавьте туда несколько книг по умолчанию.
|
||||||
|
3. Создайте метод `lend_book(self, book, reader)`, который проверяет статус книги, меняет его через метод книги на *"Выдана"* и передает читателю в его список.
|
||||||
|
|
||||||
|
**Тесты:**
|
||||||
|
|
||||||
|
1. Создайте библиотеку.
|
||||||
|
2. Создайте читателя.
|
||||||
|
3. Используя библиотеку, выдайте читателю книгу.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Задача 6. Магазин (ООП - Агрегация)
|
||||||
|
|
||||||
|
**Постановка**
|
||||||
|
|
||||||
|
* **Товар:** Имеет название и цену.
|
||||||
|
* **Корзина:** Содержит список товаров. Может добавлять товар и считать общую стоимость.
|
||||||
|
* **Покупатель:** Имеет имя, баланс и корзину. Может оплачивать корзину.
|
||||||
|
|
||||||
|
**Задание**
|
||||||
|
|
||||||
|
**Класс `Product`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Product`.
|
||||||
|
2. Создайте метод `__init__(self, name, price)`.
|
||||||
|
|
||||||
|
**Класс `Cart`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Cart`.
|
||||||
|
2. В `__init__(self)` создайте пустой список `products`.
|
||||||
|
3. Создайте метод `add_product(self, product)`, добавляющий товар в список.
|
||||||
|
4. Создайте метод `get_total(self)`, возвращающий сумму цен всех товаров.
|
||||||
|
|
||||||
|
**Класс `Customer`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Customer`.
|
||||||
|
2. В `__init__(self, name, balance, cart)` сохраните переданные параметры.
|
||||||
|
3. Создайте метод `pay(self)`, который проверяет, хватает ли баланса для оплаты корзины. Если хватает — вычитает сумму из баланса и очищает корзину. Если нет — выводит предупреждение.
|
||||||
|
|
||||||
|
**Тесты:**
|
||||||
|
|
||||||
|
1. Создайте несколько товаров.
|
||||||
|
2. Создайте корзину и добавьте в нее товары.
|
||||||
|
3. Создайте покупателя, передав ему корзину и баланс.
|
||||||
|
4. Заставьте покупателя оплатить товары в корзине.
|
||||||
|
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
### Задача 6. Магазин (ООП - Агрегация)
|
||||||
|
|
||||||
|
**Постановка**
|
||||||
|
|
||||||
|
* **Товар:** Имеет название и цену.
|
||||||
|
* **Корзина:** Содержит список товаров. Может добавлять товар и считать общую стоимость.
|
||||||
|
* **Покупатель:** Имеет имя, баланс и корзину. Может оплачивать корзину.
|
||||||
|
|
||||||
|
**Задание**
|
||||||
|
|
||||||
|
**Класс `Product`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Product`.
|
||||||
|
2. Создайте метод `__init__(self, name, price)`.
|
||||||
|
|
||||||
|
**Класс `Cart`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Cart`.
|
||||||
|
2. В `__init__(self)` создайте пустой список `products`.
|
||||||
|
3. Создайте метод `add_product(self, product)`, добавляющий товар в список.
|
||||||
|
4. Создайте метод `get_total(self)`, возвращающий сумму цен всех товаров.
|
||||||
|
|
||||||
|
**Класс `Customer`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Customer`.
|
||||||
|
2. В `__init__(self, name, balance, cart)` сохраните переданные параметры.
|
||||||
|
3. Создайте метод `pay(self)`, который проверяет, хватает ли баланса для оплаты корзины. Если хватает — вычитает сумму из баланса и очищает корзину. Если нет — выводит предупреждение.
|
||||||
|
|
||||||
|
**Тесты:**
|
||||||
|
|
||||||
|
1. Создайте несколько товаров.
|
||||||
|
2. Создайте корзину и добавьте в нее товары.
|
||||||
|
3. Создайте покупателя, передав ему корзину и баланс.
|
||||||
|
4. Заставьте покупателя оплатить товары в корзине.
|
||||||
|
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
**Постановка**
|
||||||
|
Мы создаем упрощенную версию нейронной сети, которая умеет классифицировать данные на несколько категорий сразу.
|
||||||
|
|
||||||
|
* **Нейрон (`Neuron`):** Теперь это отдельный объект, хранящий свои уникальные веса и смещение (`bias`). Умеет вычислять активацию и корректировать веса методом градиентного спуска.
|
||||||
|
* **Слой (`Layer`):** Содержит список объектов `Neuron`. Управляет передачей сигналов всем нейронам сразу.
|
||||||
|
* **Тренер (`Trainer`):** Обучает слой, минимизируя среднюю ошибку по всем нейронам.
|
||||||
|
|
||||||
|
**Задание**
|
||||||
|
|
||||||
|
**Класс `Neuron`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Neuron`.
|
||||||
|
2. В `__init__(self, inputs_count, learning_rate)` инициализируйте `weights` (список случайных значений, например 0.1) и `bias` (смещение, начните с 0.0).
|
||||||
|
3. Метод `predict(self, inputs)`: верните сумму произведений (входы * веса) + `bias`.
|
||||||
|
4. Метод `train(self, inputs, target)`:
|
||||||
|
* Вычислите `prediction = self.predict(inputs)`.
|
||||||
|
* Вычислите `error = target - prediction`.
|
||||||
|
* Обновите веса: `w = w + (error * input * lr)`.
|
||||||
|
* Обновите смещение: `bias = bias + (error * lr)`.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**Класс `Layer`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Layer`.
|
||||||
|
2. В `__init__(self, neurons_count, inputs_count, learning_rate)` создайте список `neurons`, заполнив его `neurons_count` объектами класса `Neuron`.
|
||||||
|
3. Метод `forward(self, inputs)`: возвращает список предсказаний каждого нейрона.
|
||||||
|
4. Метод `train_layer(self, inputs, targets)`: принимает список правильных ответов (для каждого нейрона свой). Проходит циклом по нейронам и вызывает у каждого метод `train` с соответствующим `target`.
|
||||||
|
|
||||||
|
**Класс `Trainer`:**
|
||||||
|
|
||||||
|
1. Создайте класс `Trainer`.
|
||||||
|
2. Метод `fit(self, layer, dataset, epochs)`:
|
||||||
|
* Внешний цикл `for epoch in range(epochs)`.
|
||||||
|
* Внутренний цикл по датасету: берет `inputs` и список `targets`.
|
||||||
|
* Вызывает `layer.train_layer(inputs, targets)`.
|
||||||
|
* (Опционально) Каждую 10-ю эпоху выводить среднюю ошибку по слою.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**Тесты:**
|
||||||
|
|
||||||
|
1. Создайте слой из 2 нейронов (каждый принимает 3 входа).
|
||||||
|
2. Создайте датасет: 3 примера, где каждый пример имеет 3 входа и 2 целевых значения.
|
||||||
|
3. Обучите слой в течение 200 эпох.
|
||||||
|
4. После обучения выведите результат предсказания для нового входа `[0.5, 0.2, 0.1]`.
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
temperatures = [37, 48, 30, 29, 41, -30, -29, -90]
|
||||||
|
number_ice = 0
|
||||||
|
for i in (temperatures):
|
||||||
|
if i >= 0:
|
||||||
|
print(i)
|
||||||
|
else:
|
||||||
|
number_ice += 1
|
||||||
|
|
||||||
|
print(f"Number ice Day: {number_ice}")
|
||||||
Reference in New Issue
Block a user