Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pull request for lesson02 #2

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
337 changes: 337 additions & 0 deletions lesson02.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,337 @@
# Lesson 1
from datetime import date

current_date = date.today()
# 1. Создать список и заполнить его элементами различных типов данных. Реализовать скрипт проверки типа данных каждого элемента.
# Использовать функцию type() для проверки типа. Элементы списка можно не запрашивать у пользователя, а указать явно, в программе.
print("==================== 1 ====================")
print(
"Задача: Создать список и заполнить его элементами различных типов данных. "
"Реализовать скрипт проверки типа данных каждого элемента. "
"Использовать функцию type() для проверки типа. "
"Элементы списка можно не запрашивать у пользователя, а указать явно, в программе.")
print("===========================================")

l = [1, 2.34, "test", '123', [1, 3, 4], (1, 3, 4, True), {"str", '123', 123, (2, "3", 4.23)}, None, False,
frozenset({1, '2', 3.4}), {'q': 1, 'w': '2', 'e': 3.33}]


def show_type_of_elements(li, addstr=''):
if isinstance(li, dict):
for el, v in li.items():
print(f"{addstr}{el}={v} is {type(v)}")
if isinstance(v, list) or isinstance(v, tuple) or isinstance(v, set) or isinstance(v, frozenset) \
or isinstance(v, dict):
show_type_of_elements(v, addstr + "|--> ")
else:
for el in li:
print(f"{addstr}{el} is {type(el)}")
if isinstance(el, list) or isinstance(el, tuple) or isinstance(el, set) or isinstance(el, frozenset) \
or isinstance(el, dict):
show_type_of_elements(el, addstr + "|--> ")


show_type_of_elements(l)
input('Нажмите Enter для продолжения...')

# 2. Для списка реализовать обмен значений соседних элементов, т.е. Значениями обмениваются элементы с индексами 0 и 1, 2 и 3 и т.д.
# При нечетном количестве элементов последний сохранить на своем месте. Для заполнения списка элементов необходимо использовать функцию input().
print("==================== 2 ====================")
print("Задача: Для списка реализовать обмен значений соседних элементов, т.е. "
"Значениями обмениваются элементы с индексами 0 и 1, 2 и 3 и т.д. "
"При нечетном количестве элементов последний сохранить на своем месте. "
"Для заполнения списка элементов необходимо использовать функцию input()")
print("===========================================")

li = []
# n = 0
# while True:
# try:
# n = abs(int(input('Введите количество элементов в списке: ')))
# break
# except Exception as e:
# print('Вы ввели неверное число! Попробуйте снова.')
#
# for i in range(0, n):
# while True:
# try:
# el = input(f'Введите {i+1} элемент списка: ')
# break
# except Exception as e:
# print('Вы ввели неверное значение! Попробуйте снова.')
# li.append(el)

while True:
try:
li = [item for item in input("Введите элементы списка разделенные пробелами: ").split()]
break
except Exception as e:
print('Вы ввели неверные значение! Попробуйте снова.')

print(f'Введенный Вами список: {li}')


def replace_list_elements_12(l):
for i in range(len(l) // 2):
l[2 * i], l[2 * i + 1] = l[2 * i + 1], l[2 * i]
return l


print(f'Результирующий список: {replace_list_elements_12(li)}')
input('Нажмите Enter для продолжения...')

# 3. Пользователь вводит месяц в виде целого числа от 1 до 12.
# Сообщить к какому времени года относится месяц (зима, весна, лето, осень).
# Напишите решения через list и через dict.
print("==================== 3 ====================")
print("Задача: Пользователь вводит месяц в виде целого числа от 1 до 12. "
"Сообщить к какому времени года относится месяц (зима, весна, лето, осень). "
"Напишите решения через list и через dict.")
print("===========================================")

n = 0
while True:
try:
n = abs(int(input('Введите номер месяца: ')))
if n < 1 or n > 12:
raise Exception("Неврный номер месяца!")
break
except Exception as e:
print('Вы ввели неверный номер месяца! Попробуйте снова.')


def get_month_info_with_list(d: int):
m = ''
s = ''
seasons = ['Зима', 'Весна', 'Лето', 'Осень']
smnths = [[1, 2, 12], [3, 4, 5], [6, 7, 8], [9, 10, 11]]
months = 'Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь'.split()
for mgr in smnths:
if d in mgr:
m = months[d - 1]
s = seasons[smnths.index(mgr)]
print(f"Введенный Вами месяц: {d} - это {months[d - 1]} сезон: {seasons[smnths.index(mgr)]}")
break
return m, s


def get_month_info_with_dict(d: int):
m = ''
s = ''
seasons = {'Зима': [1, 2, 12], 'Весна': [3, 4, 5], 'Лето': [6, 7, 8], 'Осень': [9, 10, 11]}
months = {1: 'Январь', 2: 'Февраль', 3: 'Март', 4: 'Апрель', 5: 'Май', 6: 'Июнь', 7: 'Июль', 8: 'Август',
9: 'Сентябрь', 10: 'Октябрь', 11: 'Ноябрь', 12: 'Декабрь'}
m = months.get(d)
for key, val in seasons.items():
if d in val:
s = key
print(f"Введенный Вами месяц: {d} - это {months.get(d)} сезон: {key}")
break
return m, s


get_month_info_with_list(n)
get_month_info_with_dict(n)

input('Нажмите Enter для продолжения...')

# 4. Пользователь вводит строку из нескольких слов, разделённых пробелами. Вывести каждое слово с новой строки.
# Строки необходимо пронумеровать. Если в слово длинное, выводить только первые 10 букв в слове.
print("==================== 4 ====================")
print("Задача: Пользователь вводит строку из нескольких слов, разделённых пробелами. "
"Вывести каждое слово с новой строки. Строки необходимо пронумеровать. "
"Если в слово длинное, выводить только первые 10 букв в слове.")
print("===========================================")
s = input('Введите строку из нескольких слов, разделённых пробелами: ')
l = s.split()
for v in l:
print(f"{l.index(v)+1}) {(v, v[0:10]+'...')[len(v) > 10]}")

input('Нажмите Enter для продолжения...')

# 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].
print("==================== 5 ====================")
print("Задача: Реализовать структуру «Рейтинг», представляющую собой не возрастающий набор натуральных чисел. "
"У пользователя необходимо запрашивать новый элемент рейтинга. "
"Если в рейтинге существуют элементы с одинаковыми значениями, "
"то новый элемент с тем же значением должен разместиться после них.")
print("===========================================")


def set_last_index_in_list(lst, nmb, pos=0):
index = -1
el_is_appended = False
for nm in lst:
if nm < nmb:
index = lst.index(nm)
lst.insert(index, nmb)
el_is_appended = True
break
if not el_is_appended:
lst.append(nmb)
index = len(lst) - 1
return index, lst


li = [7, 4, 4, 3, 2]
print(f'Текущий реитинг {li}')
num_entered = True
while num_entered:
n = 0
while True:
try:
s = input('Введите значение для рейтинга или exit для выхода: ')
if s.lower() == 'exit':
num_entered = False
break
n = abs(int(s))
break
except Exception as e:
print('Вы ввели неверное число! Попробуйте снова.')
if num_entered:
# приравнивание li к lst не обязательно, т.к. они ссылаются на один и тот же участок памяти (li is lst)
inx, li = set_last_index_in_list(li, n)
print(f"Вы ввели число {n}, добавлено в рейтинг под индексом {inx}. Результат: {li}")

input('Нажмите Enter для продолжения...')

# 6. * Реализовать структуру данных «Товары». Она должна представлять собой список кортежей. Каждый кортеж хранит информацию об отдельном товаре.
# В кортеже должно быть два элемента — номер товара и словарь с параметрами (характеристиками товара: название, цена, количество, единица измерения).
# Структуру нужно сформировать программно, т.е. запрашивать все данные у пользователя.
# Пример готовой структуры:
# [
#
# (1, {“название”: “компьютер”, “цена”: 20000, “количество”: 5, “eд”: “шт.”}),
# (2, {“название”: “принтер”, “цена”: 6000, “количество”: 2, “eд”: “шт.”}),
# (3, {“название”: “сканер”, “цена”: 2000, “количество”: 7, “eд”: “шт.”})
#
# ]
# Необходимо собрать аналитику о товарах. Реализовать словарь, в котором каждый ключ — характеристика товара, например название,
# а значение — список значений-характеристик, например список названий товаров.
# Пример:
# {
#
# “название”: [“компьютер”, “принтер”, “сканер”],
# “цена”: [20000, 6000, 2000],
# “количество”: [5, 2, 7],
# “ед”: [“шт.”]
#
# }
print("==================== 6 ====================")
print("Задача: Реализовать структуру данных «Товары». Она должна представлять собой список кортежей. "
"Каждый кортеж хранит информацию об отдельном товаре. В кортеже должно быть два элемента — номер товара "
"и словарь с параметрами (характеристиками товара: название, цена, количество, единица измерения). "
"Структуру нужно сформировать программно, т.е. запрашивать все данные у пользователя.")
print("===========================================")
goods_list = [
(1, {'Наменование': 'Картошка', 'Цена': 13.13, 'Количество': 100.0, 'Еденица измерения': 'кг'}),
(2, {'Наменование': 'Морковь', 'Цена': 12.1, 'Количество': 4.7, 'Еденица измерения': 'кг'}),
(3, {'Наменование': 'Лук', 'Цена': 45.32, 'Количество': 2.45, 'Еденица измерения': 'кг'})
]
goods_analitics = {}

def add_new_goods():
name = ''
while True:
try:
name = input('Введите наименование товара: ')
if name is None or len(name.strip()) < 3:
raise Exception("Неверное наименование!")
break
except Exception as e:
print('Вы ввели неверное наименование! Наименование не может быть пустым и должно содержать минимум 3 символа, не считая пробелов. Попробуйте снова.')
price = 0.00
while True:
try:
price = abs(float(input('Введите цену товара: ')))
break
except Exception as e:
print('Вы ввели неверную сумму! Попробуйте снова.')
cnt = 0.00
while True:
try:
cnt = abs(float(input('Введите количество товара: ')))
break
except Exception as e:
print('Вы ввели неверное количество! Попробуйте снова.')
measure = ''
while True:
try:
measure = input('Введите еденицу измерения: ')
if measure is None or len(name.strip()) < 1:
raise Exception("Неверная еденица измерения!")
break
except Exception as e:
print(
'Вы ввели неверную еденицу измерения! Еденица измерения не может быть пустой и должна содержать минимум 1 символ, не считая пробелов. Попробуйте снова.')
print(f"Вы ввели товар: Наменование - {name}; Цена - {price}; Количество - {cnt}; Еденица измерения - {measure}. ")
add_act = ''
while True:
try:
add_act = input(
'Добавить указанный товар в каталог (Y/N): ')
if add_act is None or add_act.lower() not in ['y', 'n']:
raise Exception("Неверное действие!")
elif add_act.lower() == 'y':
goods_item = (len(goods_list)+1, {"Наменование": name, "Цена": price, "Количество": cnt, "Еденица измерения": measure})
goods_list.append(goods_item)
print('Товар успешно добавлен в каталог.')
break
except Exception as e:
print('Вы ввели неверное действие! Попробуйте снова.')


def print_goods(goods_list_):
print()
print("Список товаров")
for v in goods_list_:
print(f"{v[0]} - {v[1]}")
print()


def get_goods_analitics(goods_list_):
goods_analitics_ = {}
for v in goods_list_:
for key, val in v[1].items():
if key not in goods_analitics_.keys():
goods_analitics_[key] = []
if val not in goods_analitics_[key]:
goods_analitics_[key].append(val)
return goods_analitics_


def print_analitics(goods_analitics_):
print()
print("Аналитика по товарам")
for key, val in goods_analitics_.items():
print(f"{key}: {val}")
print()


action = ''
while True:
try:
action = input('Выберите действие (1/add - добавить товар; 2/list - показать список товаров; 3/analitics - показать aналитику по товарам; 4/exit - выход): ')
if action.lower() in ['1', 'add']:
add_new_goods()
elif action.lower() in ['2', 'list']:
print_goods(goods_list)
elif action.lower() in ['3', 'analitics']:
goods_analitics = get_goods_analitics(goods_list)
print_analitics(goods_analitics)
elif action.lower() in ['4', 'exit']:
break
else:
raise Exception("Неверное действие!")
except Exception as e:
print(e)
print('Вы ввели неверное действие! Попробуйте снова.')

input('Нажмите Enter для продолжения...')