Лабы / ЛР4 ООП
.docxЗадание 1:
class Sorted():
#Конструктор со свойством список:
def __init__(self, spisok):
self.spisok = spisok
def edit(self):
lenght = int(self.spisok.pop(0)) #Сохраняем введенное число в переменную и убираем её из списка
self.spisok.sort(key = lambda spisok: spisok.lower())#
#Проверка на сответсвие числа и кол-ва элементов
if len(self.spisok) != lenght:
print("")
return
#Проверка на 0 <= N <= 1000
if not (0 <= lenght <= 1000):
print("")
return
#Проверка на 1 <= |S| <= 15
filtered_spisok = filter(lambda s: 1 <= len(s) <= 15, self.spisok)
if len(list(filtered_spisok)) != len(self.spisok): #Проверка на фильтрование, если отфильтровалось - что-то не так
print("")
return
print(" ".join(self.spisok))
while True:
stroka = input("Введите входные параметры\n").split()
lst = Sorted(stroka)
lst.edit()
Задание 2:
from functools import reduce #Функция reduce
class Vector():
@staticmethod #Декоратор, чтобы запустить метод класса без объявления его
def calc(prev, next):
global numbers, sum_all
prev[-1].append(next)#добавляем элемент в список внутри основного списка
#проверка на соответсвие условию
if sum(prev[-1]) + next < len(prev) * (sum_all / 3):
return prev
#если условие не выполняется, то убираем все использованные элементы из начального списка
#это нужно, чтобы он считал дальше сумму не от всех элеменов, а от оставшихся
numbers = list(set(numbers) - set(prev[-1]))#если убрать эту строчку, то код будет работать, как указано в условии задачи, но последний список всегда будет нулевым:
#условие остановки
if numbers:
sum_all = sum(numbers)
prev.append([])
return prev
while True:
c = int(input("Введите количество цифр\n"))
numbers = input("Введите числа через пробел\n").split()
if c == len(numbers):
numbers = list(map(int, numbers))
numbers = sorted(numbers)
sum_all = sum(numbers)
result = reduce(Vector.calc, numbers, [[]])
print(" ".join(map(str,result)))
else:
print("Кол-во чисел не совпадает")