Как использовать функцию partial?
Пытаюсь решить задачу (https://stepik.org/lesson/63306/step/8)
Напишите функцию con_class, которая принимает целое положительное число n и возвращает итерируемый объект (iterable), содержащий все делящиеся на n целые числа в промежутке от 0 до 100 (обе границы включены).
Определите эту функцию в терминах другой функции как частично применённую (имеется ввиду, что вам не понадобится создавать свою функцию, а потом ее уже частично применять к чему-то --- достаточно обратиться к какой-то встроенной функции).
Примеры ожидаемого поведения
for num in con_class(101):
print(num)
0 # из чисел 0, 1, 2, ..., 100 только 0 делится на 101
Какую встроенную функцию имел ввиду автор? divmod? Мое решение ниже
from functools import partial
con_class = partial(divmod, 101, n=int(input()))
Failed test #1 of 90. Runtime error
Error:
Traceback (most recent call last):
File "jailed_code", line 6, in <module>
print(list(con_class(int(input()))))
EOFError: EOF when reading a line
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
from functools import partial
con_class = partial(divmod, 101, n=int(input()))
- Во-первых вы не должны использовать
inputв своей функции, ваша функция должна просто принимать аргумент обычным образом в скобочкахcon_class(n). Именно использованиемinputвызвана ошибкаEOFError: EOF when reading a line- вы таким образом забрали ввод, который предназначался для проверочной обвязки, которая проверяет работу вашей функции - Вы должны передать в
partialсаму функцию, а также какую-то часть её аргументов. При этом у функцииdivmodнет именованных аргументов вообще и в частности аргументаn=, так что вы написали что-то непонятное.101передастся первым аргументом вdivmod, а сn=будет ошибка. - На самом деле я тоже не очень понимаю, что они от вас хотели в этой хитрой формулировке, но в любом случае то, что вы написали, не выполняет задачу фильтрации чисел по условию задач. Попробуйте сначала решить задачу не обращая внимание на эту формулировку, просто хоть как-нибудь. А потом уже можно будет подумать, как туда применить
partialилиlambda, например.