diff --git a/less-02/task-01.py b/less-02/task-01.py new file mode 100644 index 0000000..60c80df --- /dev/null +++ b/less-02/task-01.py @@ -0,0 +1,26 @@ +# Создать список и заполнить его элементами различных типов данных. +# Реализовать скрипт проверки типа данных каждого элемента. Использовать +# функцию type() для проверки типа. Элементы списка можно не запрашивать +# у пользователя, а указать явно, в программе + +def print_type(el): + if (type(el) == list or type(el) == tuple): + print(el,' : ',type(el), end=' --> ') + for e in el: + print(e, end=' : ') + print(type(e), end=', ') + elif(type(el) == dict): + print(el, ' : ', type(el), end=' --> ') + for e in el.items(): + print(e[0],' : ',e[1],end=', ') + else: + print(el, end=' : ') + print(type(el), end=', ') + + +my_list=[12, 3.14, 'python', False, [12,34,56], (1,2,3), {'a':1,'b':2}] + +for el in my_list: + print_type(el) + print('') + diff --git a/less-02/task-02.py b/less-02/task-02.py new file mode 100644 index 0000000..9441235 --- /dev/null +++ b/less-02/task-02.py @@ -0,0 +1,14 @@ +# Для списка реализовать обмен значений соседних элементов. +# Значениями обмениваются элементы с индексами 0 и 1, 2 и 3 и т. д. +# При нечётном количестве элементов последний сохранить на своём месте. +# Для заполнения списка элементов нужно использовать функцию input(). + +str = input('Введите несколько значений (число или символ) через запятую: ') +#str='1,2,3,4,5,6,7,8,9' +new_list = str.split(',') +print(new_list) + +for i in range(1,len(new_list),2): + new_list[i-1],new_list[i] = new_list[i],new_list[i-1] + +print(new_list) \ No newline at end of file diff --git a/less-02/task-03.py b/less-02/task-03.py new file mode 100644 index 0000000..ac7fb09 --- /dev/null +++ b/less-02/task-03.py @@ -0,0 +1,30 @@ +# Пользователь вводит месяц в виде целого числа от 1 до 12. +# Сообщить, к какому времени года относится месяц (зима, весна, лето, осень). +# Напишите решения через list и dict + +def int2month(n_month): + months = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'] + return months[n_month-1] + +def inputIntNum(message): + n=-1 + while True: + try: + n = int(input(message + ' ')) + except ValueError: + print('Это не число, попробуйте снова.') + else: + if n < 1 or n > 12: + print('Число должно быть от 1 до 12') + continue + break + return n + +vg_list = ['зимы','зимы','весны','весны','весны','лета','лета','лета','осени','осени','осени','зими'] +vg_dick = {1:'зимы', 2:'зимы', 3:'весны', 4:'весны', 5:'весны', 6:'лета', + 7:'лета', 8:'лета', 9:'осени', 10:'осени', 11:'осени', 12:'зимы'} + +month = inputIntNum('Введите номер месяца:') + +print(f'dict: Месяц {int2month(month)} это месяц {vg_dick.get(month)}') +print(f'list: Месяц {int2month(month)} это месяц {vg_list[month-1]}') diff --git a/less-02/task-04.py b/less-02/task-04.py new file mode 100644 index 0000000..9085e6a --- /dev/null +++ b/less-02/task-04.py @@ -0,0 +1,10 @@ +# Пользователь вводит строку из нескольких слов, разделённых пробелами. +# Вывести каждое слово с новой строки. Строки нужно пронумеровать. +# Если слово длинное, выводить только первые 10 букв в слове. + +str = input('Введите строку (нескольких слов, разделённых пробелами): ') +#str='один два три четыре пять шесть семь иоченьдлинноеслово' +new_list = str.split() # не указываем тип разделителя - повторяющиеся пробелы будут как один + +for i,word in enumerate(new_list): + print(i+1, word[:10]) diff --git a/less-02/task-05.py b/less-02/task-05.py new file mode 100644 index 0000000..f487286 --- /dev/null +++ b/less-02/task-05.py @@ -0,0 +1,39 @@ +# Реализовать структуру «Рейтинг», представляющую собой набор натуральных чисел, который не возрастает. +# У пользователя нужно запрашивать новый элемент рейтинга. +# Если в рейтинге существуют элементы с одинаковыми значениями, +# то новый элемент с тем же значением должен разместиться после них. + +def inputIntNum(message): + n=-1 + while True: + try: + n = int(input(message + ' ')) + except ValueError: + print('Это не число, попробуйте снова.') + else: + if n < 0: + print('Введено отрицательное значение!') + continue + break + return n + + +my_list = [7, 5, 3, 3, 2] +print(my_list) +number = inputIntNum('Введите натуральное число или "0" для выхода:') + +while number >0: + c=len(my_list) + if number not in my_list: # если нет элемента то найдем куда вставить + for i in range(c): + if number > my_list[i]: + my_list.insert(i,number) + break + if i == c-1: + my_list.append(number) + else: + indx = my_list.count(number) + my_list.insert(indx, number) + + print(my_list) + number = inputIntNum('Введите натуральное число или "0" для выхода') diff --git a/less-02/task-06.py b/less-02/task-06.py new file mode 100644 index 0000000..bc57333 --- /dev/null +++ b/less-02/task-06.py @@ -0,0 +1,71 @@ +# Реализовать структуру данных «Товары». Она должна представлять собой список кортежей. +# Каждый кортеж хранит информацию об отдельном товаре. +# В кортеже должно быть два элемента — номер товара и словарь с параметрами, +# то есть характеристиками товара: название, цена, количество, единица измерения. +# Структуру нужно сформировать программно, запросив все данные у пользователя. + +def my_str2int(str): # верним число если это возможно + try: + n_int=int(str) + except ValueError: + return str + else: + return n_int + +def my_print_list(struct): + print('[') + for el in struct: + print(el) + print(']') +def my_print_dict(dict): + print('{') + for key in dict.keys(): + print(f"'{key}': {dict[key]},") + print('}') + +temp_struct = [ + (1, {'название': 'компьютер', 'цена': 20000, 'количество': 5, 'eд': 'шт.'}), + (2, {'название': 'принтер', 'цена': 6000, 'количество': 2, 'eд': 'шт.'}), + (3, {'название': 'сканер', 'цена': 2000, 'количество': 7, 'eд': 'шт.'}) +] + +my_struct = [] +my_dict={} + +if False : # Постывить True для отладки на temp_struct + my_struct = temp_struct.copy() + my_dict = {'название': [], 'цена': [], 'количество': [], 'eд': []} +else: # запросим у пользователя список полей (ключей) словаря + i=1 + next = True + str = input('Введите характеристиками товара через запятую:(def: название,цена,количество,единица измерения): \n')\ + or 'название,цена,количество,единица измерения' + name_list = str.split(',') + + while next: + str_dict = {} + for itm in name_list: + str_dict.update({itm : my_str2int(input(f'{itm}: '))}) + my_dict.update({itm : []}) + + my_struct.append( (i,str_dict,) ) + next = False if input('Внести еще одну запись, (Y,n)' ).lower() == "n" else True + i += 1 + +# Нужно собрать аналитику о товарах. Реализовать словарь, в котором каждый ключ — характеристика товара, +# например, название. Тогда значение — список значений-характеристик, например, список названий товаров. + +print('\nЗаполненая структура:') +#print(my_struct) +my_print_list(my_struct) + +for el_struct in my_struct: + for key in el_struct[1].keys(): + if el_struct[1].get(key) not in my_dict[key]: # проверим повторяющиеся или можно было еще организовать через set + my_dict[key].append(el_struct[1].get(key)) # но тут все равно перебор + +print('\nАналитика:') +#print(my_dict) +my_print_dict(my_dict) + +