Share This
Связаться со мной
Крути в низ
Categories
//🐍 Функции в Python: 5 задач для тренировки *args, **kwargs и lambda-функций

🐍 Функции в Python: 5 задач для тренировки *args, **kwargs и lambda-функций

Пишем функции, принимающие *args и **kwargs, находим различия между двумя словарями, применяем анонимные lambda-функции и используем мемоизацию для решения олимпиадной задачи про кубики.

funkcii v python 5 zadach dlja trenirovki args kwargs i lambda funkcij 4ebff28 - 🐍 Функции в Python: 5 задач для тренировки *args, **kwargs и lambda-функций

Продукты

Примеры вызова и вывода функции

Вызов #1:

         printGroceries('Бананы', [1, 2], ('Python',), 'Яблоки', '', 'Макароны', 5, True, 'Кофе', False)     

Вывод #1:

         1) Бананы 2) Яблоки 3) Макароны 4) Кофе      

Вызов #2:

         printGroceries([4], {}, 1, 2, {'Mathlab'}, '')     

Вывод #2:

         Нет продуктов     

Решение

Способ 1:

         def printGroceries(*args): 	products = [i for i in args if type(i) is str and i != ''] 	if len(products) != 0:     	res = [str(i+1)+')' + ' ' + products[i] for i in range(len(products))]     	result = 'n'.join(res)     	print(result) 	else:     	print('Нет продуктов')     

Способ 2:

         def printGroceries(*args): 	list_products = [i for i in args if type(i) == str and len(i) > 0] 	if len(list_products) == 0:     	print("Нет продуктов") 	else:     	for i in range(len(list_products)):         	print(f'{i+1}) {list_products[i]}')     

Способ 3:

         def printGroceries(*args): 	ls = [i for i in args if type(i) == str and i not in ('', ' ')] 	print('n'.join([f'{num}) {i}' for num, i in enumerate(ls, 1)]) if ls else 'Нет продуктов')      

Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека питониста»

Интересно, перейти к каналу

Личные данные

Примеры вызова и вывода функции

Вызов #1:

         personalData(first_name='John', last_name='Doe', age=28, position='Python developer')     

Вывод #1:

         age: 28 first_name: John last_name: Doe position: Python developer      

Вызов #2:

         personalData(first_name='Jack', last_name='Smith', age=32, work_experience = '5 years', position='Project manager')     

Вывод #2:

         age: 32 first_name: Jack last_name: Smith position: Project manager work_experience: 5 years     

Решение

Способ 1:

         def personalData(**kwargs): 	for k, v in sorted(kwargs.items()):     	print(f'{k}: {v}')     

Способ 2:

         def personalData(**kwargs): 	[print(f'{key}: {kwargs[key]}') for key in sorted(kwargs.keys())]      

Способ 3:

         def personalData(**kwargs): 	print('n'.join(f'{k}: {v}' for k, v in sorted(kwargs.items())))      

Значение многочлена

Многочленом степени n называется выражение вида

Напишите функцию evaluate(coefficients, x), которая принимает список коэффициентов и значение аргумента x. При реализации можно использовать анонимные lambda-функции, а также встроенные функции map() и reduce().

Примеры вызова и вывода функции

Ввод:

         2 4 3 10     

Вывод:

         243     

Решение

Способ 1:

         from functools import reduce import operator def evaluate(a, x): 	xi = map(lambda i: x**i, range(len(a)-1, -1, -1)) 	axi = map(operator.mul, a, xi)         	 	return reduce(operator.add, axi, 0) a = list(map(int, input().split())) x = int(input()) print(evaluate(a, x))      

Способ 2:

         from functools import reduce evaluate = lambda coefficients, x: reduce(lambda s, a: s * x + a, coefficients, 0) print(evaluate([*map(int, input().split())], int(input())))      

Способ 3:

         (lambda a, x: print(sum(map(lambda i: x**i[0] * int(i[1]), enumerate(a)))))(input().split()[::-1], int(input()))     

Способ 4:

         def evaluate(coefficients, x): 	s = 0 	for a in coefficients:     	s = s * x + a 	return s c = [*map(int, input().split())] x = int(input()) print(evaluate(c, x))      

Способ 5:

         from functools import reduce def evaluate(coe, x): 	return reduce(lambda n, z: n + z[1] * x**(len(coe) - z[0]), list(enumerate(coe[:-1], 1)), 0) + coe[-1] print(evaluate(list(map(int, input().split())), int(input())))      

Сравнение словарей

  • added, если ключа не было в первом словаре, но он появился во втором;
  • deleted, если ключ был в первом словаре, но его не было во втором;
  • changed, если ключ присутствует в обоих словарях, но значения различаются;
  • equal, если ключ присутствует в обоих словарях, и значения совпадают.

Примечание: ключи и значения словарей представлены исключительно в строковом типе данных. Ключи в возвращаемом функцией словаре должны располагаться в следующем порядке: сначала все ключи первого словаря, затем — второго.

Решение

Способ 1:

         def keyDifference(dict1, dict2): 	d1, d2 = set(dict1), set(dict2) 	sample = list(dict1.keys()) + list(dict2.keys()) 	return dict(sorted([(i, 'deleted') for i in d1 - d2] +             	[(i, 'equal') if dict1[i] == dict2[i] else (i, 'changed') for i in d1 & d2] +             	[(i, 'added') for i in d2 - d1], key=lambda x: sample.index(x[0])))     

Способ 2:

         def keyDifference(dict1, dict2):   d = {}   for i in dict1:   	if i in dict2:     	d[i] = ('changed','equal')[dict2[i]==dict1[i]]   	else:     	d[i] = dict2.get(i,'deleted')   for i in dict2: 	if i not in d:   	d[i] = 'added'   return d     

Способ 3:

         def keyDifference(d_1, d_2): 	out = {} 	tmp = d_1 | d_2 	for key, value in tmp.items():     	out[key] = ('added' if d_1.get(key) is None else ('deleted' if d_2.get(key) is None else ('equal' if (d_1.get(key) == d_2.get(key)) else 'changed'))) 	return out     

Лесенка

Лесенкой называется набор кубиков, в котором каждый последующий слой содержит меньше кубиков, чем предыдущий. Напишите программу, вычисляющую число лесенок, которое можно построить из n кубиков.

funkcii v python 5 zadach dlja trenirovki args kwargs i lambda funkcij 7e32b8f - 🐍 Функции в Python: 5 задач для тренировки *args, **kwargs и lambda-функций

Лесенка из кубиков

Формат ввода

Натуральное число n (1 ≤ n ≤ 100) – количество кубиков в лесенке.

Формат вывода

Число лесенок, которые можно построить из n кубиков.

Примеры ввода и вывода

Ввод #1:

         3     

Вывод #1:

         2     

Ввод #2:

         6     

Вывод #2:

         4     

Решение

         import functools @functools.lru_cache(maxsize=None) def kol_les(n, k): 	if n == 0:     	return 1 	ans = 0  	 	for i in range(k + 1, n + 1):     	ans += kol_les(n - i,  i) 	return ans n = int(input()) print(kol_les(n, 0))      

***

Материалы по теме

  • 🐍 5 задач с решениями на Python для начинающих разработчиков
  • 🐍 Регулярные выражения в Python за 5 минут: теория и практика для новичков и не только
  • 🐍 Задача о поврежденной XML-строке

  • 3 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Свежие комментарии

    Рубрики

    About Author 01.

    blank
    Roman Spiridonov

    Моя специальность - Back-end Developer, Software Engineer Python. Мне 39 лет, я работаю в области информационных технологий более 5 лет. Опыт программирования на Python более 3 лет. На Django более 2 лет.

    Categories 05.

    © Speccy 2022 / All rights reserved

    Связаться со мной
    Close