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-строке

  • 0 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