-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheduard_task_2_hw_11.py
66 lines (47 loc) · 4.25 KB
/
eduard_task_2_hw_11.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
"""Задача 2 10 баллов: написать свою реализацию функции reduce() с описание в инлайновых и многострочных комментариях
ее работы.
def my_reduce(): моя реализация.
"""
"""
И так, погуглив я узнал что reduce(), это функция которая принимает другую функцию и итерабельный обьект(тоесть как я
сначала думал Int не подходит, можно например List.) а потом производит последувательную поочередную операцию перебора
итерабельных элементов при которых первый аргумент функции накапливает сумму, а второй прибавляет поочередно к первому.
А так же у него есть 3й необязательный аргумент инициализатор, который сумируется с суммой итерабельных обьектов в
зависимости от операции тоесть если в функции a + b то в начале он идет превым аргументом к a.
"""
def my_reduce(func, iterable_object, initializer=None): # Производим в функции 3 элемента 1й принимает функцию,
# 2й итерабельный обьект, 3й необязательный аргумен инициализатор приравниваем его к None
it = iter(iterable_object) # Использум функцию итер для итерабельного обьекта иначе он вернет нам сам обьект
# а не итерацию
if initializer is None: # Если инициализотор равно None
value = next(it) # То в валью добавляется первый элемент из итерабельного обьекта
else: # Если же в инициализаторе не None, а аргумент
value = initializer # То валью равняется инициализатору в нашем случает допустим 10
for el in it: # Перебераем с помощью цыкла for елементы в ит
value = func(value, el) # Передаем элементы в функциию если у на уже есть 1й аргумент из инициализатора
# то он идет первый функции value, дале поочередно пропускаются элементы через цыкл в переменной el, функция
# выполняет операцию и возвращает значение, мы его сохраняем в value
return value # Возвращаем значение
"""Задача 3 30 баллов: написать функцию которая с помощью assert будет тестировать ваш самописны reduce"""
def test_func(cumulative, added): # пример функции
assert added != 0, 'на 0 делить нельзя!'
value = cumulative / added
return value
for_fun = my_reduce(test_func, [0], 44) # Присваиваем функцию my_reduce с функцией внутри, итерабельным обьектом
# и 3м аргументом инициализатором
print(for_fun) # принтим наши исходные данные
"""
Задача 4. 30 баллов: Создать класс с методом который будет возвращать область видимости созданного экземпляра класса.
В конструкторе(__ininit__) вашего класса пускай будут те параметры которые вы захотите.
"""
class home:
def __init__(self, room=5, kitchen=2, hall=1, bathroom=1, hallway=1):
self.room = room
self.kitchen = kitchen
self.hall = hall
self.bathroom = bathroom
self.hallway = hallway
def vars_compliting(self):
return vars(self)
my_home = home(1, 1, 0, 1, 1)
print(my_home.vars_compliting())