end less02

This commit is contained in:
denis-on 2022-02-21 22:24:16 +03:00
parent 69271cb2ea
commit d7cbcbfb2c
6 changed files with 190 additions and 0 deletions

26
less-02/task-01.py Normal file
View File

@ -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('')

14
less-02/task-02.py Normal file
View File

@ -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)

30
less-02/task-03.py Normal file
View File

@ -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]}')

10
less-02/task-04.py Normal file
View File

@ -0,0 +1,10 @@
# Пользователь вводит строку из нескольких слов, разделённых пробелами.
# Вывести каждое слово с новой строки. Строки нужно пронумеровать.
# Если слово длинное, выводить только первые 10 букв в слове.
str = input('Введите строку (нескольких слов, разделённых пробелами): ')
#str='один два три четыре пять шесть семь иоченьдлинноеслово'
new_list = str.split() # не указываем тип разделителя - повторяющиеся пробелы будут как один
for i,word in enumerate(new_list):
print(i+1, word[:10])

39
less-02/task-05.py Normal file
View File

@ -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" для выхода')

71
less-02/task-06.py Normal file
View File

@ -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, '': 'шт.'}),
(2, {'название': 'принтер', 'цена': 6000, 'количество': 2, '': 'шт.'}),
(3, {'название': 'сканер', 'цена': 2000, 'количество': 7, '': 'шт.'})
]
my_struct = []
my_dict={}
if False : # Постывить True для отладки на temp_struct
my_struct = temp_struct.copy()
my_dict = {'название': [], 'цена': [], 'количество': [], '': []}
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)