diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea1b27d --- /dev/null +++ b/.gitignore @@ -0,0 +1,219 @@ +# Created by .ignore support plugin (hsz.mobi) +### Python template +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$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 +.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 + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.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/ + +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +Будет удалено .idea/inspectionProfiles/ +Будет удалено .idea/misc.xml +Будет удалено .idea/modules.xml +Будет удалено .idea/python_13_10_2020.iml +Будет удалено .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..73f69e0 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/homeworks/les01/__init__.py b/homeworks/les01/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/homeworks/les01/task01.py b/homeworks/les01/task01.py deleted file mode 100644 index bc0a41d..0000000 --- a/homeworks/les01/task01.py +++ /dev/null @@ -1,17 +0,0 @@ -""" -1. Поработайте с переменными, создайте несколько, выведите на экран, запросите у пользователя несколько чисел и - строк и сохраните в переменные, выведите на экран. -""" - -a = 12 # целое -b = 12.0 # с плавающей точкой -c = 'Замечен слабый интеллект' - -print(a, b, c) - -name = input('введите ваше имя: ') -title = input('введите ваше звание: ') -age = int(input('введите возраст: ')) -value = float(input('введите годовой доход (тыс.): ')) - -print(f'Уважаемый {title} {name}, в {age} лет/года ваше состояние в год увеличивается на {value} тыс. руб. ') diff --git a/homeworks/les01/task02.py b/homeworks/les01/task02.py deleted file mode 100644 index 41579cc..0000000 --- a/homeworks/les01/task02.py +++ /dev/null @@ -1,8 +0,0 @@ -""" - 2. Пользователь вводит время в секундах. - Переведите время в часы, минуты и секунды и выведите в формате чч:мм:сс. - Используйте форматирование строк. -""" - -second = int(input('Введите время в секундах: ')) -print(f'Введено время: {second//(60*60)}:{(second-second//(60*60))//60}:{second - second-second//(60*60)//60}') diff --git a/homeworks/les02/task01.py b/homeworks/les02/task01.py new file mode 100644 index 0000000..f3c9d1a --- /dev/null +++ b/homeworks/les02/task01.py @@ -0,0 +1,10 @@ +""" +1. Создать список и заполнить его элементами различных типов данных. +Реализовать скрипт проверки типа данных каждого элемента. +Использовать функцию type() для проверки типа. +Элементы списка можно не запрашивать у пользователя, а указать явно, в программе. +""" + +for _ in [None, ..., 1, True, 1.1, complex(5, 6), 'Hello', (1, 2, 3, ...), b'abc', [1, 2, 3], bytearray(b'abc'), + {'a', 'b', 'c'}, frozenset({'a', 'b', 'c'}), {1: 'a', 2: 'b', 3: 'c'}]: + print('Тип данных :', type(_)) # ! diff --git a/homeworks/les02/task02.py b/homeworks/les02/task02.py new file mode 100644 index 0000000..e07a2e4 --- /dev/null +++ b/homeworks/les02/task02.py @@ -0,0 +1,15 @@ +""" +2. Для списка реализовать обмен значений соседних элементов, + т.е. Значениями обмениваются элементы с индексами 0 и 1, 2 и 3 и т.д. +При нечетном количестве элементов последний сохранить на своем месте. +Для заполнения списка элементов необходимо использовать функцию input(). + +""" + +elements = input('Введите элементы через пробел : ').split() + +for i in range(0, len(elements), 2): + if i < len(elements) - 1: + elements[i], elements[i + 1] = elements[i + 1], elements[i] # ! + +print(elements) diff --git a/homeworks/les02/task03.py b/homeworks/les02/task03.py new file mode 100644 index 0000000..021ded0 --- /dev/null +++ b/homeworks/les02/task03.py @@ -0,0 +1,14 @@ +""" +3. Пользователь вводит месяц в виде целого числа от 1 до 12. +Сообщить к какому времени года относится месяц (зима, весна, лето, осень). +Напишите решения через list и через dict. + +""" + +seasons_list = ['зима'] * 2 + ['весна'] * 3 + ['лето'] * 3 + ['осень'] * 3 + ['зима'] # ! +seasons_dict = dict([i + 1, seasons_list[i]] for i in range(0, len(seasons_list))) # ! ! + +month = int(input("Введите месяц : ")) + +print('Решение по списку:', seasons_list[month - 1]) # индекс начинается с 0 +print('Решение по словарю:', seasons_dict[month]) diff --git a/homeworks/les02/task04.py b/homeworks/les02/task04.py new file mode 100644 index 0000000..7b59858 --- /dev/null +++ b/homeworks/les02/task04.py @@ -0,0 +1,11 @@ +""" +4. Пользователь вводит строку из нескольких слов, разделённых пробелами. +Вывести каждое слово с новой строки. Строки необходимо пронумеровать. +Если в слово длинное, выводить только первые 10 букв в слове. + +""" + +text = input("Ведите предложение : ") +words = text.split() +for idx, word in enumerate(words, 1): + print(f'{idx}. {word[:10]}') diff --git a/homeworks/les02/task05.py b/homeworks/les02/task05.py new file mode 100644 index 0000000..b558abd --- /dev/null +++ b/homeworks/les02/task05.py @@ -0,0 +1,40 @@ +""" +5. Реализовать структуру «Рейтинг», представляющую собой не возрастающий набор натуральных чисел. +У пользователя необходимо запрашивать новый элемент рейтинга. +Если в рейтинге существуют элементы с одинаковыми значениями, +то новый элемент с тем же значением должен разместиться после них. +Подсказка. Например, набор натуральных чисел: 7, 5, 3, 3, 2. +Пользователь ввел число 3. Результат: 7, 5, 3, 3, 3, 2. +Пользователь ввел число 8. Результат: 8, 7, 5, 3, 3, 2. +Пользователь ввел число 1. Результат: 7, 5, 3, 3, 2, 1. +Набор натуральных чисел можно задать непосредственно в коде, например, my_list = [7, 5, 3, 3, 2]. +""" + +rating = [7, 5, 3, 3, 2] + +rate = int(input("Введите новый рейтинг : ")) +# rating.append(rate) +# rating.sort(reverse=True) + +# обработка краевых вариантов: больше большего и меньше меньшего +if rate >= rating[0]: + rating.insert(0, rate) +elif rate <= rating[len(rating) - 1]: + rating.insert(len(rating), rate) +else: + # ! + # используется бинарный поиск + left = -1 + right = len(rating) + while right > left + 1: + middle = (left + right) // 2 + if rating[middle] == rate: + break; + if rating[middle] < rate: + right = middle + else: + left = middle + # вставка на ближайшее место + rating.insert(middle + 1, rate) + +print("Результат : ", rating) diff --git a/homeworks/les02/task06.py b/homeworks/les02/task06.py new file mode 100644 index 0000000..089a8a9 --- /dev/null +++ b/homeworks/les02/task06.py @@ -0,0 +1,73 @@ +""" +6. * Реализовать структуру данных «Товары». Она должна представлять собой список кортежей. +Каждый кортеж хранит информацию об отдельном товаре. +В кортеже должно быть два элемента — номер товара и словарь с параметрами +(характеристиками товара: название, цена, количество, единица измерения). +Структуру нужно сформировать программно, т.е. запрашивать все данные у пользователя. +Пример готовой структуры: +[ +(1, {'название': 'компьютер', 'цена': 20000, 'количество': 5, 'eд': 'шт.'}), +(2, {'название': 'принтер', 'цена': 6000, 'количество': 2, 'eд': 'шт.'}), +(3, {'название': 'сканер', 'цена': 2000, 'количество': 7, 'eд': 'шт.'}) +] +Необходимо собрать аналитику о товарах. +Реализовать словарь, в котором каждый ключ — характеристика товара, например название, +а значение — список значений-характеристик, например список названий товаров. +Пример: +{ +'название': ['компьютер', 'принтер', 'сканер'], +'цена': [20000, 6000, 2000], +'количество': [5, 2, 7], +'ед': ['шт.'] +} +""" + +# характеристики товара с типами +goods_params = { + 'название': 'str', + 'цена': 'int', + 'количество': 'int', + 'ед': 'str' +} + +stop_sym = ['', ' ', 'q'] +goods = [] +idx = 1 +param_value = None # вводимое значение +is_end = False +print("Введите характеристики товара (пробел,q - выход)") + +while not is_end: + param_new = {} + for param_name, param_type in goods_params.items(): + is_param_ok = False + param_value = '' + while not is_param_ok: # ввод с преобразованием типов + param_value = input(f'{param_name} ({param_type}) : ') + is_param_ok = True + if param_type == 'int': + try: + param_value = int(param_value) + except ValueError: + is_param_ok = False + print(f"Ошибка ввода, должен быть тип '{param_type}'. Повторите ввод. ") + param_new[param_name] = param_value # собрать текущее описание товара + if param_value in stop_sym: + is_end = True + print("Ввод закончен.") + break + if is_end: + break + # print(param_new) + goods.append((idx, param_new)) # добавить запись о товаре + idx += 1# print(goods) +analytics = {} + +for (num, elem) in goods: # по всем записям + for name, spec in elem.items(): # по всем характеристикам товара + if name not in analytics: # если характеристика отсутсвует + analytics[name] = [spec] # добавить новый узел + elif spec not in analytics[name]: # если значение не найдено + analytics[name].append(spec) # добавить новое значение в список + +print(analytics)