Решение модуля 15.5 Поколение Python: для продвинутых

Модуль 15.5 (Функции высшего порядка) курса «Поколение Python: курс для продвинутых» курс расскажет о:

  • Функции высшего порядка
  • Самописные функции map()filter()reduce()

Публикуем решения на урок 15.5 Функции высшего порядка.

Функция высшего порядка это

функция, которая возвращает в качестве результата работы другую функцию
функция, которая принимает другие функции в качестве аргументов

Как в математике называется функция reduce()?


левая свёртка

Какая функция позволяет получить список элементов, преобразованных в соответствии с заданной функцией?

map()

Какая функция позволяет отфильтровать элементы списка с помощью функции-предиката?

filter()

Что выведет приведенный ниже код? 

def high_order_function(func):
return func(10)

def square(x):
return x**2

def minus_one(x):
return x — 1

num1 = high_order_function(square)
num2 = high_order_function(minus_one) print(num1*num2)

900

Что выведет приведенный ниже код? 

words = [‘abba’, ‘qwerty’, ‘python’, ‘a’, ‘deed’, ‘nun’, ‘level’, ‘deified’, ‘bbbbb’, ‘mother’, ‘surface’, ‘sister’]
words_len = map(len, words) print(max(words_len))

Функция map():

def map(function, items):
result = []
for item in items:
result.append(function(item))
return result

7

Что выведет приведенный ниже код?

def predicate(word):
return word == word[::-1]

words = [‘abba’, ‘qwerty’, ‘python’, ‘a’, ‘deed’, ‘nun’, ‘level’, ‘language’, ‘deified’, ‘bbbbb’, ‘mother’, ‘sister’, ‘surface’, ‘1234321’] filtered = filter(predicate, words) print(len(filtered))

Функция filter():

def filter(function, items):
result = []
for item in items:
if function(item):
result.append(item)
return result

8

Что выведет приведенный ниже код? 

numbers = [-2, 45, 45, -7, -45, 37, -42, 27, -58, -58, -12, -27, -49, -27, -56, 4, -99, -11, 86]
var1 = max(numbers, key=abs)
var2 = min(map(abs, numbers)) print(var1 + var2)

Функция map():

def map(function, items):
result = []
for item in items:
result.append(function(item))
return result

-97

Напишите программу, которая с помощью функции map() округляет все элементы списка numbers до 22 десятичных знаков, а затем выводит их, каждый на отдельной строке.

def map(function, items):
    result = []
    for item in items:
        result.append(function(item))
    return result


numbers = [3.56773, 5.57668, 4.00914, 56.24241, 9.01344, 32.12013, 23.22222, 90.09873, 45.45, 314.1528, 2.71828, 1.41546]

result = map(lambda x: round(x, 2), numbers)

for elem in result:
    print(elem)

Напишите программу, которая с помощью функций filter() и map() отбирает из заданного списка numbers трёхзначные числа, дающие при делении на 55 остаток 22, и выводит их кубы, каждый в отдельной строке.

def map(function, items):
    result = []
    for item in items:
        result.append(function(item))
    return result


def filter(function, items):
    result = []
    for item in items:
        if function(item):
            result.append(item)
    return result


numbers = [1014, 1321, 675, 1215, 56, 1386, 1385, 431, 1058, 486, 1434, 696, 1016, 1084, 424, 1189, 475, 95, 1434, 1462, 815, 776, 657, 1225, 912, 537, 1478, 1176, 544, 488, 668, 944, 207, 266, 1309, 1027, 257, 1374, 1289, 1155, 230, 866, 708, 144, 1434, 1163, 345, 394, 560, 338, 232, 182, 1438, 1127, 928, 1309, 98, 530, 1013, 898, 669, 105, 130, 1363, 947, 72, 1278, 166, 904, 349, 831, 1207, 1496, 370, 725, 926, 175, 959, 1282, 336, 1268, 351, 1439, 186, 273, 1008, 231, 138, 142, 433, 456, 1268, 1018, 1274, 387, 120, 340, 963, 832, 1127]

def tu(a):
    return a%5==2 and len(str(a))==3
def coub(x):
    return x**3
map(print, map(coub,filter(tu,numbers)))

Напишите программу для вычисления и вывода суммы квадратов элементов списка numbers. Решите задачу двумя способами: с помощью функции reduce(), и с помощью функций map() и sum().

def reduce(operation, items, initial_value):
    acc = initial_value
    for item in items:
        acc = operation(acc, item)
    return acc

numbers = [97, 42, 9, 32, 3, 45, 31, 77, -1, 11, -2, 75, 5, 51, 34, 28, 46, 1, -8, 84, 16, 51, 90, 56, 65, 90, 23, 35, 11, -10, 70, 90, 90, 12, 96, 58, -8, -4, 91, 76, 94, 60, 72, 43, 4, -6, -5, 51, 58, 60, 30, 38, 67, 62, 36, 72, 34, 82, 62, -1, 60, 82, 87, 81, -7, 57, 26, 36, 17, 43, 80, 40, 75, 94, 91, 64, 38, 72, 29, 84, 38, 35, 7, 54, 31, 95, 78, 27, 82, 1, 64, 94, 31, 29, -8, 98, 24, 61, 7, 73]

print (sum([pow(elem, 2) for elem in numbers]))

Напишите программу для вычисления и вывода суммы квадратов двузначных чисел, которые делятся на 7 без остатка.

def map(function, items):
    result = []
    for item in items:
        result.append(function(item))
    return result


def filter(function, items):
    result = []
    for item in items:
        if function(item):
            result.append(item)
    return result

numbers = [77, 293, 28, 242, 213, 285, 71, 286, 144, 276, 61, 298, 280, 214, 156, 227, 228, 51, -4, 202, 58, 99, 270, 219, 94, 253, 53, 235, 9, 158, 49, 183, 166, 205, 183, 266, 180, 6, 279, 200, 208, 231, 178, 201, 260, -35, 152, 115, 79, 284, 181, 92, 286, 98, 271, 259, 258, 196, -8, 43, 2, 128, 143, 43, 297, 229, 60, 254, -9, 5, 187, 220, -8, 111, 285, 5, 263, 187, 192, -9, 268, -9, 23, 71, 135, 7, -161, 65, 135, 29, 148, 242, 33, 35, 211, 5, 161, 46, 159, 23, 169, 23, 172, 184, -7, 228, 129, 274, 73, 197, 272, 54, 278, 26, 280, 13, 171, 2, 79, -2, 183, 10, 236, 276, 4, 29, -10, 41, 269, 94, 279, 129, 39, 92, -63, 263, 219, 57, 18, 236, 291, 234, 10, 250, 0, 64, 172, 216, 30, 15, 229, 205, 123, -105]

print (sum([pow(elem, 2) for elem in numbers if abs(elem)//100 == 0 and abs(elem)//10 > 0 and elem%7==0]))

Напишите функцию func_apply(), принимающую на вход функцию и список значений и возвращающую список, в котором каждое значение будет результатом применения переданной функции к переданному списку.

def func_apply(func, arr):
    return [func(item) for item in arr]

Понравилась статья? Поделиться с друзьями:
Комментарии: 3
  1. Светлана

    а будут ответы на 15.6

    1. admin (автор)

      Да, на следующей недели планирую продолжить

    2. admin (автор)

      Добавил все ответы на 15 модуль

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Adblock
detector