π Π€ΡΠ½ΠΊΡΠΈΠΈ Π² Python: 5 Π·Π°Π΄Π°Ρ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΊΠΈ *args, **kwargs ΠΈ lambda-ΡΡΠ½ΠΊΡΠΈΠΉ
Пишем функции, принимающие *args и **kwargs, находим различия между двумя словарями, применяем анонимные lambda-функции и используем мемоизацию для решения олимпиадной задачи про кубики.
Примеры вызова и вывода функции Вызов #1: Вывод #1: Вызов #2: Вывод #2: Способ 1: Способ 2: Способ 3: Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека питониста» Интересно, перейти к каналу
Примеры вызова и вывода функции Вызов #1: Вывод #1: Вызов #2: Вывод #2: Способ 1: Способ 2: Способ 3: Многочленом степени n называется выражение вида
Напишите функцию evaluate(coefficients, x), которая принимает список коэффициентов и значение аргумента x. При реализации можно использовать анонимные lambda-функции, а также встроенные функции map() и reduce(). Примеры вызова и вывода функции Ввод: Вывод: Способ 1: Способ 2: Способ 3: Способ 4: Способ 5:
Примечание: ключи и значения словарей представлены исключительно в строковом типе данных. Ключи в возвращаемом функцией словаре должны располагаться в следующем порядке: сначала все ключи первого словаря, затем — второго. Способ 1: Способ 2: Способ 3: Лесенкой называется набор кубиков, в котором каждый последующий слой содержит меньше кубиков, чем предыдущий. Напишите программу, вычисляющую число лесенок, которое можно построить из n кубиков. Лесенка из кубиков Формат ввода Натуральное число n (1 ≤ n ≤ 100) – количество кубиков в лесенке. Формат вывода Число лесенок, которые можно построить из n кубиков. Примеры ввода и вывода Ввод #1: Вывод #1: Ввод #2: Вывод #2:
*** Продукты
printGroceries('Бананы', [1, 2], ('Python',), 'Яблоки', '', 'Макароны', 5, True, 'Кофе', False)
1) Бананы 2) Яблоки 3) Макароны 4) Кофе
printGroceries([4], {}, 1, 2, {'Mathlab'}, '')
Нет продуктов
Решение
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('Нет продуктов')
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]}')
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 'Нет продуктов')
Личные данные
personalData(first_name='John', last_name='Doe', age=28, position='Python developer')
age: 28 first_name: John last_name: Doe position: Python developer
personalData(first_name='Jack', last_name='Smith', age=32, work_experience = '5 years', position='Project manager')
age: 32 first_name: Jack last_name: Smith position: Project manager work_experience: 5 years
Решение
def personalData(**kwargs): for k, v in sorted(kwargs.items()): print(f'{k}: {v}')
def personalData(**kwargs): [print(f'{key}: {kwargs[key]}') for key in sorted(kwargs.keys())]
def personalData(**kwargs): print('n'.join(f'{k}: {v}' for k, v in sorted(kwargs.items())))
Значение многочлена
2 4 3 10
243
Решение
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))
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())))
(lambda a, x: print(sum(map(lambda i: x**i[0] * int(i[1]), enumerate(a)))))(input().split()[::-1], int(input()))
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))
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
, если ключ присутствует в обоих словарях, и значения совпадают.Решение
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])))
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
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
Лесенка
3
2
6
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))
Материалы по теме
- 6 views
- 0 Comment
- ΠΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ - ΠΠΎΠ»ΡΠ°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΠ²ΡΡΠ΅ΡΠ° ΠΈΠ»ΠΈ 10 Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΡ ΡΠ°ΠΊΡΠΎΠ² ΠΎΠ± ΠΠ’-ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΡΡ
- All Posts
- Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ - βοΈ 5 ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ Π½Π° ΠΈΡΠΏΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΌ ΡΡΠΎΠΊΠ΅: ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΠΉΡΠΈ ΠΈ ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΡΠ²ΠΎΠ΅ΠΌ ΡΠ²ΠΎΠ»ΡΠ½Π΅Π½ΠΈΠΈ ΠΏΠΎΡΠ»Π΅ Π½Π΅Π³ΠΎ