From 66f5eee92633777e45193aa9f142d1ec40f24bca Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Sat, 17 Oct 2020 15:37:46 +0300 Subject: [PATCH 01/17] les02 init --- .idea/.gitignore | 8 ++++++++ homeworks/les02/task01.py | 6 ++++++ homeworks/les02/task02.py | 7 +++++++ homeworks/les02/task03.py | 6 ++++++ homeworks/les02/task04.py | 6 ++++++ homeworks/les02/task05.py | 11 +++++++++++ homeworks/les02/task06.py | 23 +++++++++++++++++++++++ 7 files changed, 67 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 homeworks/les02/task01.py create mode 100644 homeworks/les02/task02.py create mode 100644 homeworks/les02/task03.py create mode 100644 homeworks/les02/task04.py create mode 100644 homeworks/les02/task05.py create mode 100644 homeworks/les02/task06.py 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/les02/task01.py b/homeworks/les02/task01.py new file mode 100644 index 0000000..86fb3da --- /dev/null +++ b/homeworks/les02/task01.py @@ -0,0 +1,6 @@ +""" +1. Создать список и заполнить его элементами различных типов данных. +Реализовать скрипт проверки типа данных каждого элемента. +Использовать функцию type() для проверки типа. +Элементы списка можно не запрашивать у пользователя, а указать явно, в программе. +""" \ No newline at end of file diff --git a/homeworks/les02/task02.py b/homeworks/les02/task02.py new file mode 100644 index 0000000..473e923 --- /dev/null +++ b/homeworks/les02/task02.py @@ -0,0 +1,7 @@ +""" +2. Для списка реализовать обмен значений соседних элементов, + т.е. Значениями обмениваются элементы с индексами 0 и 1, 2 и 3 и т.д. +При нечетном количестве элементов последний сохранить на своем месте. +Для заполнения списка элементов необходимо использовать функцию input(). + +""" \ No newline at end of file diff --git a/homeworks/les02/task03.py b/homeworks/les02/task03.py new file mode 100644 index 0000000..e1002ed --- /dev/null +++ b/homeworks/les02/task03.py @@ -0,0 +1,6 @@ +""" +3. Пользователь вводит месяц в виде целого числа от 1 до 12. +Сообщить к какому времени года относится месяц (зима, весна, лето, осень). +Напишите решения через list и через dict. + +""" \ No newline at end of file diff --git a/homeworks/les02/task04.py b/homeworks/les02/task04.py new file mode 100644 index 0000000..e8c44f0 --- /dev/null +++ b/homeworks/les02/task04.py @@ -0,0 +1,6 @@ +""" +4. Пользователь вводит строку из нескольких слов, разделённых пробелами. +Вывести каждое слово с новой строки. Строки необходимо пронумеровать. +Если в слово длинное, выводить только первые 10 букв в слове. + +""" \ No newline at end of file diff --git a/homeworks/les02/task05.py b/homeworks/les02/task05.py new file mode 100644 index 0000000..85fac1b --- /dev/null +++ b/homeworks/les02/task05.py @@ -0,0 +1,11 @@ +""" +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]. +""" \ No newline at end of file diff --git a/homeworks/les02/task06.py b/homeworks/les02/task06.py new file mode 100644 index 0000000..b99d881 --- /dev/null +++ b/homeworks/les02/task06.py @@ -0,0 +1,23 @@ +""" +6. * Реализовать структуру данных «Товары». Она должна представлять собой список кортежей. +Каждый кортеж хранит информацию об отдельном товаре. +В кортеже должно быть два элемента — номер товара и словарь с параметрами +(характеристиками товара: название, цена, количество, единица измерения). +Структуру нужно сформировать программно, т.е. запрашивать все данные у пользователя. +Пример готовой структуры: +[ +(1, {“название”: “компьютер”, “цена”: 20000, “количество”: 5, “eд”: “шт.”}), +(2, {“название”: “принтер”, “цена”: 6000, “количество”: 2, “eд”: “шт.”}), +(3, {“название”: “сканер”, “цена”: 2000, “количество”: 7, “eд”: “шт.”}) +] +Необходимо собрать аналитику о товарах. +Реализовать словарь, в котором каждый ключ — характеристика товара, например название, +а значение — список значений-характеристик, например список названий товаров. +Пример: +{ +“название”: [“компьютер”, “принтер”, “сканер”], +“цена”: [20000, 6000, 2000], +“количество”: [5, 2, 7], +“ед”: [“шт.”] +} +""" \ No newline at end of file From 15aad786d2c1c23dae62abd0ca682d313f3e679b Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Sat, 17 Oct 2020 15:56:33 +0300 Subject: [PATCH 02/17] les02 task01 beta --- homeworks/les02/task01.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/homeworks/les02/task01.py b/homeworks/les02/task01.py index 86fb3da..a49b07c 100644 --- a/homeworks/les02/task01.py +++ b/homeworks/les02/task01.py @@ -3,4 +3,8 @@ Реализовать скрипт проверки типа данных каждого элемента. Использовать функцию type() для проверки типа. Элементы списка можно не запрашивать у пользователя, а указать явно, в программе. -""" \ No newline at end of file +""" + +elements = [1, 1.1, 'Hello', complex(5,6)] +for element in elements: + print('Тип данных :', type(element)) From 4c2bc312031b8ed21e31cf5a11288c208ce99cab Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Sat, 17 Oct 2020 15:59:58 +0300 Subject: [PATCH 03/17] les01 clearing --- homeworks/les01/__init__.py | 0 homeworks/les01/task01.py | 17 ----------------- homeworks/les01/task02.py | 8 -------- 3 files changed, 25 deletions(-) delete mode 100644 homeworks/les01/__init__.py delete mode 100644 homeworks/les01/task01.py delete mode 100644 homeworks/les01/task02.py 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}') From 0b2183708b22d26aa3c45d0e4bb2f1a8c1e797a2 Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Sat, 17 Oct 2020 16:14:08 +0300 Subject: [PATCH 04/17] les02 add gitignore --- .gitignore | 219 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 .gitignore 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 From f710dd8b456a95c8c92d2cdee032d033fe1f2681 Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Sat, 17 Oct 2020 17:17:59 +0300 Subject: [PATCH 05/17] les02 task01 beta2 --- homeworks/les02/task01.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/homeworks/les02/task01.py b/homeworks/les02/task01.py index a49b07c..99a4111 100644 --- a/homeworks/les02/task01.py +++ b/homeworks/les02/task01.py @@ -5,6 +5,7 @@ Элементы списка можно не запрашивать у пользователя, а указать явно, в программе. """ -elements = [1, 1.1, 'Hello', complex(5,6)] +elements = [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'}] for element in elements: print('Тип данных :', type(element)) From 39d4e0a98a582ce38f6a96c816a757202116c441 Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Sun, 18 Oct 2020 14:14:47 +0300 Subject: [PATCH 06/17] les02 task02 release --- homeworks/les02/task02.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/homeworks/les02/task02.py b/homeworks/les02/task02.py index 473e923..1952a2c 100644 --- a/homeworks/les02/task02.py +++ b/homeworks/les02/task02.py @@ -4,4 +4,28 @@ При нечетном количестве элементов последний сохранить на своем месте. Для заполнения списка элементов необходимо использовать функцию input(). -""" \ No newline at end of file +""" +str_elem = None +elements = [] +sym_stop = {'', ' ', 'q'} # стоп символы + +while str_elem not in sym_stop: # вводить элементы до стоп символов + str_elem = input('Введите элемент :') + if str_elem in sym_stop: # запретить ввод стоп-символов + break + elements.append(str_elem) + +part_odd = elements[0::2] # нечетные элементы +part_even = elements[1::2] # четные элементы +list_pair = [] + +for idx in range(len(part_even)): # проход по количеству четных элементов + # собираем массив [четный, нечетный] + list_pair.append(part_even[idx]) + list_pair.append(part_odd[idx]) + +# список нечетный - добавить последний элемент из нечетного списка +if len(elements) % 2: + list_pair.append(part_odd[-1]) + +print(list_pair) From ceda90d5586d00c290b62ba53b68abce7606de34 Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Sun, 18 Oct 2020 20:06:30 +0300 Subject: [PATCH 07/17] les02 task03 release --- homeworks/les02/task03.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/homeworks/les02/task03.py b/homeworks/les02/task03.py index e1002ed..4b5d502 100644 --- a/homeworks/les02/task03.py +++ b/homeworks/les02/task03.py @@ -3,4 +3,13 @@ Сообщить к какому времени года относится месяц (зима, весна, лето, осень). Напишите решения через list и через dict. -""" \ No newline at end of file +""" + +seasons_list = ['зима', 'зима', 'весна', 'весна', 'весна', 'лето', 'лето', 'лето', 'осень', 'осень', 'осень', 'зима'] +seasons_dict = {1: 'зима', 2: 'зима', 3: 'весна', 4: 'весна', 5: 'весна', 6: 'лето', 7: 'лето', 8: 'лето', 9: 'осень', + 10: 'осень', 11: 'осень', 12: 'зима'} + +month = int(input("Введите месяц : ")) + +print('Решение по списку:', seasons_list[month - 1]) # индекс начинается с 0 +print('Решение по словарю:', seasons_dict[month]) From 19f8bf49a19a39858ece00014c5499b47a7f8a88 Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Sun, 18 Oct 2020 20:35:41 +0300 Subject: [PATCH 08/17] les02 task04 release --- homeworks/les02/task04.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/homeworks/les02/task04.py b/homeworks/les02/task04.py index e8c44f0..7b59858 100644 --- a/homeworks/les02/task04.py +++ b/homeworks/les02/task04.py @@ -3,4 +3,9 @@ Вывести каждое слово с новой строки. Строки необходимо пронумеровать. Если в слово длинное, выводить только первые 10 букв в слове. -""" \ No newline at end of file +""" + +text = input("Ведите предложение : ") +words = text.split() +for idx, word in enumerate(words, 1): + print(f'{idx}. {word[:10]}') From 31847658f88f1af3db60d5de62f9703d888edffd Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Sun, 18 Oct 2020 21:11:06 +0300 Subject: [PATCH 09/17] les02 task05 release --- homeworks/les02/task05.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/homeworks/les02/task05.py b/homeworks/les02/task05.py index 85fac1b..d01a760 100644 --- a/homeworks/les02/task05.py +++ b/homeworks/les02/task05.py @@ -8,4 +8,11 @@ Пользователь ввел число 8. Результат: 8, 7, 5, 3, 3, 2. Пользователь ввел число 1. Результат: 7, 5, 3, 3, 2, 1. Набор натуральных чисел можно задать непосредственно в коде, например, my_list = [7, 5, 3, 3, 2]. -""" \ No newline at end of file +""" + +rating = [7, 5, 3, 3, 2] + +rate = int(input("Введите новый рейтинг : ")) +rating.append(rate) +rating.sort(reverse=True) +print("Результат : ", rating) From d210ecc80249bafdc10a5b6fa8e67f9a331f51b4 Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Sun, 18 Oct 2020 22:58:10 +0300 Subject: [PATCH 10/17] les02 task06 beta --- homeworks/les02/task06.py | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/homeworks/les02/task06.py b/homeworks/les02/task06.py index b99d881..4e8a198 100644 --- a/homeworks/les02/task06.py +++ b/homeworks/les02/task06.py @@ -6,18 +6,38 @@ Структуру нужно сформировать программно, т.е. запрашивать все данные у пользователя. Пример готовой структуры: [ -(1, {“название”: “компьютер”, “цена”: 20000, “количество”: 5, “eд”: “шт.”}), -(2, {“название”: “принтер”, “цена”: 6000, “количество”: 2, “eд”: “шт.”}), -(3, {“название”: “сканер”, “цена”: 2000, “количество”: 7, “eд”: “шт.”}) +(1, {'название': 'компьютер', 'цена': 20000, 'количество': 5, 'eд': 'шт.'}), +(2, {'название': 'принтер', 'цена': 6000, 'количество': 2, 'eд': 'шт.'}), +(3, {'название': 'сканер', 'цена': 2000, 'количество': 7, 'eд': 'шт.'}) ] Необходимо собрать аналитику о товарах. Реализовать словарь, в котором каждый ключ — характеристика товара, например название, а значение — список значений-характеристик, например список названий товаров. Пример: { -“название”: [“компьютер”, “принтер”, “сканер”], -“цена”: [20000, 6000, 2000], -“количество”: [5, 2, 7], -“ед”: [“шт.”] +'название': ['компьютер', 'принтер', 'сканер'], +'цена': [20000, 6000, 2000], +'количество': [5, 2, 7], +'ед': ['шт.'] } -""" \ No newline at end of file +""" + +goods = [ + (1, {'название': 'компьютер', 'цена': 20000, 'количество': 5, 'ед': 'шт.'}), + (2, {'название': 'принтер', 'цена': 6000, 'количество': 2, 'ед': 'шт.'}), + (3, {'название': 'сканер', 'цена': 2000, 'количество': 7, 'ед': 'шт.'}) +] + +analytics = { + 'название': [], + 'цена': [], + 'количество': [], + 'ед': [] +} + +for (num, elem) in goods: + for name, spec in elem.items(): + if spec not in analytics[name]: + analytics[name].append(spec) + +print(analytics) From 0940bd4903372eefafec682038aaa30c79eee9fd Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Mon, 19 Oct 2020 17:48:24 +0300 Subject: [PATCH 11/17] les01 task02 ver2b --- homeworks/les02/task02.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/homeworks/les02/task02.py b/homeworks/les02/task02.py index 1952a2c..a0e588d 100644 --- a/homeworks/les02/task02.py +++ b/homeworks/les02/task02.py @@ -7,13 +7,8 @@ """ str_elem = None elements = [] -sym_stop = {'', ' ', 'q'} # стоп символы -while str_elem not in sym_stop: # вводить элементы до стоп символов - str_elem = input('Введите элемент :') - if str_elem in sym_stop: # запретить ввод стоп-символов - break - elements.append(str_elem) +elements = input('Введите элементы через пробел : ').split() part_odd = elements[0::2] # нечетные элементы part_even = elements[1::2] # четные элементы From 2c1c0396303c6aa99dffdc79f7a136d66bc3c20c Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Mon, 19 Oct 2020 22:05:33 +0300 Subject: [PATCH 12/17] les02 task02 v2.0 --- homeworks/les02/task02.py | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/homeworks/les02/task02.py b/homeworks/les02/task02.py index a0e588d..9a0e345 100644 --- a/homeworks/les02/task02.py +++ b/homeworks/les02/task02.py @@ -5,22 +5,12 @@ Для заполнения списка элементов необходимо использовать функцию input(). """ -str_elem = None -elements = [] elements = input('Введите элементы через пробел : ').split() -part_odd = elements[0::2] # нечетные элементы -part_even = elements[1::2] # четные элементы -list_pair = [] - -for idx in range(len(part_even)): # проход по количеству четных элементов - # собираем массив [четный, нечетный] - list_pair.append(part_even[idx]) - list_pair.append(part_odd[idx]) - -# список нечетный - добавить последний элемент из нечетного списка -if len(elements) % 2: - list_pair.append(part_odd[-1]) - -print(list_pair) +for i in range(0, len(elements), 2): + if (i + 1) < len(elements): + b = elements[i] + elements[i] = elements[i + 1] + elements[i + 1] = b +print(elements) From 28cacea94ab79aa5f8005c88d664840cd80fafb8 Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Mon, 19 Oct 2020 22:21:16 +0300 Subject: [PATCH 13/17] les02 task06 v2.0 --- homeworks/les02/task06.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/homeworks/les02/task06.py b/homeworks/les02/task06.py index 4e8a198..1706bac 100644 --- a/homeworks/les02/task06.py +++ b/homeworks/les02/task06.py @@ -28,16 +28,13 @@ (3, {'название': 'сканер', 'цена': 2000, 'количество': 7, 'ед': 'шт.'}) ] -analytics = { - 'название': [], - 'цена': [], - 'количество': [], - 'ед': [] -} +analytics = {} -for (num, elem) in goods: - for name, spec in elem.items(): - if spec not in analytics[name]: - analytics[name].append(spec) +for (num, elem) in goods: # по всем записям + for name, spec in elem.items(): # по всем характеристикам товара + if name not in analytics: # если характеристика отсутсвует + analytics.update({name: [spec]}) # добавить новый узел + elif spec not in analytics[name]: # если значение не ныйдено + analytics[name].append(spec) # добавить новое значение в список print(analytics) From 976c0c3fda8b89668671d1d45e225e150def96c7 Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Mon, 19 Oct 2020 23:30:57 +0300 Subject: [PATCH 14/17] les02 revision 1 --- homeworks/les02/task01.py | 7 +++---- homeworks/les02/task02.py | 5 ++--- homeworks/les02/task06.py | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/homeworks/les02/task01.py b/homeworks/les02/task01.py index 99a4111..636fedc 100644 --- a/homeworks/les02/task01.py +++ b/homeworks/les02/task01.py @@ -5,7 +5,6 @@ Элементы списка можно не запрашивать у пользователя, а указать явно, в программе. """ -elements = [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'}] -for element in elements: - print('Тип данных :', type(element)) +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 index 9a0e345..2e3df7e 100644 --- a/homeworks/les02/task02.py +++ b/homeworks/les02/task02.py @@ -10,7 +10,6 @@ for i in range(0, len(elements), 2): if (i + 1) < len(elements): - b = elements[i] - elements[i] = elements[i + 1] - elements[i + 1] = b + elements[i], elements[i + 1] = elements[i + 1], elements[i] # ! + print(elements) diff --git a/homeworks/les02/task06.py b/homeworks/les02/task06.py index 1706bac..65beab6 100644 --- a/homeworks/les02/task06.py +++ b/homeworks/les02/task06.py @@ -33,7 +33,7 @@ for (num, elem) in goods: # по всем записям for name, spec in elem.items(): # по всем характеристикам товара if name not in analytics: # если характеристика отсутсвует - analytics.update({name: [spec]}) # добавить новый узел + analytics[name] = [spec] # добавить новый узел elif spec not in analytics[name]: # если значение не ныйдено analytics[name].append(spec) # добавить новое значение в список From 9740b3a43e952aa0dbcfc5409e59b8dbbcb1e1d2 Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Tue, 20 Oct 2020 14:46:30 +0300 Subject: [PATCH 15/17] les01 final --- homeworks/les02/task01.py | 2 +- homeworks/les02/task03.py | 5 ++--- homeworks/les02/task05.py | 26 ++++++++++++++++++++++++-- homeworks/les02/task06.py | 2 +- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/homeworks/les02/task01.py b/homeworks/les02/task01.py index 636fedc..f3c9d1a 100644 --- a/homeworks/les02/task01.py +++ b/homeworks/les02/task01.py @@ -7,4 +7,4 @@ 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(_)) + print('Тип данных :', type(_)) # ! diff --git a/homeworks/les02/task03.py b/homeworks/les02/task03.py index 4b5d502..021ded0 100644 --- a/homeworks/les02/task03.py +++ b/homeworks/les02/task03.py @@ -5,9 +5,8 @@ """ -seasons_list = ['зима', 'зима', 'весна', 'весна', 'весна', 'лето', 'лето', 'лето', 'осень', 'осень', 'осень', 'зима'] -seasons_dict = {1: 'зима', 2: 'зима', 3: 'весна', 4: 'весна', 5: 'весна', 6: 'лето', 7: 'лето', 8: 'лето', 9: 'осень', - 10: 'осень', 11: 'осень', 12: 'зима'} +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("Введите месяц : ")) diff --git a/homeworks/les02/task05.py b/homeworks/les02/task05.py index d01a760..b558abd 100644 --- a/homeworks/les02/task05.py +++ b/homeworks/les02/task05.py @@ -13,6 +13,28 @@ rating = [7, 5, 3, 3, 2] rate = int(input("Введите новый рейтинг : ")) -rating.append(rate) -rating.sort(reverse=True) +# 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 index 65beab6..9ec2e4a 100644 --- a/homeworks/les02/task06.py +++ b/homeworks/les02/task06.py @@ -34,7 +34,7 @@ for name, spec in elem.items(): # по всем характеристикам товара if name not in analytics: # если характеристика отсутсвует analytics[name] = [spec] # добавить новый узел - elif spec not in analytics[name]: # если значение не ныйдено + elif spec not in analytics[name]: # если значение не найдено analytics[name].append(spec) # добавить новое значение в список print(analytics) From 9972640562cf0ec527450206a34e810d00f9417a Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Tue, 20 Oct 2020 15:05:51 +0300 Subject: [PATCH 16/17] les01 final --- homeworks/les02/task02.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeworks/les02/task02.py b/homeworks/les02/task02.py index 2e3df7e..e07a2e4 100644 --- a/homeworks/les02/task02.py +++ b/homeworks/les02/task02.py @@ -9,7 +9,7 @@ elements = input('Введите элементы через пробел : ').split() for i in range(0, len(elements), 2): - if (i + 1) < len(elements): + if i < len(elements) - 1: elements[i], elements[i + 1] = elements[i + 1], elements[i] # ! print(elements) From 602c1c9703d1851947c606ae4396b6cacdd5e8a6 Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Wed, 21 Oct 2020 11:26:03 +0300 Subject: [PATCH 17/17] les02 task06 final --- homeworks/les02/task06.py | 43 ++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/homeworks/les02/task06.py b/homeworks/les02/task06.py index 9ec2e4a..089a8a9 100644 --- a/homeworks/les02/task06.py +++ b/homeworks/les02/task06.py @@ -22,12 +22,45 @@ } """ -goods = [ - (1, {'название': 'компьютер', 'цена': 20000, 'количество': 5, 'ед': 'шт.'}), - (2, {'название': 'принтер', 'цена': 6000, 'количество': 2, 'ед': 'шт.'}), - (3, {'название': 'сканер', 'цена': 2000, 'количество': 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: # по всем записям