Работающее решение:
from itertools import repeat as rp, takewhile as tw
def kind_of_goose(*ns, is_sort = None, smaller = 0):
def figures(x):
p, i = 10, 1
while p < x: p, i = p * 10, i + 1
return i
rs = ((figures(n), n + 3 - n % 3 - smaller) for n in ns)
return list(rs) if is_sort is None else sorted(rs, reverse = not is_sort)
Пример:
data = [42, 16, 31, 2, 17]
print(*kind_of_goose(*data), sep='\n')
Результат:
(2, 45)
(2, 18)
(2, 33)
(1, 3)
(2, 18)
Вышеприведённый ответ от бота на этом же примере выдаёт неправильный результат (кортежи не в том порядке). Рекомендую прогонять хоть минимальный тест перед тем, как брать решения от новорегов.
хвоста и, наконец, сказала:
— Наша стая не может принимать к себе первых встречных. Все. коготы
видишь перед собой, принадлежат к лучшим гусиным семействам. А ты даже
летать как следует не умеешь. Что ты за гусь, какого роду и племени? Как ты
набрался храбрости лететь снами? - удивилась Акка Кнебекайзе,
— Мне очень захотелось посмотреть, что это за Лапландия такая. А заодно я
решил доказать вам, диким гусям, что и мы, домашние гуси, кое на что,
‘Способны.
— Ты смелый гусь - сказала она. - А тот, кто смел, может быть хорошим
товарищем в пути.
Напишите функцию kind_of_goose(), которая выберет кого брать в стаю.
Делается это так. Функция принимает произвольное количество аргументов-
чисел и произвольное количество именованных аргументов, Если
именованные аргументы не переданы, то она просто возвращает список
кортежей, в которых для каждого числа записаны: (количество разрядов,
ближайшее к этому числу большее его кратное 3 число).
Если передан именованный аргумент is_sort и он имеет значение True, то
кортежи в списке должны быть отсортированы в порядке возрастания, если
False, то в порядке убывания.
Если передан именованный аргумент smaller, то полученное в результате преобразований число
нужно еще уменьшить на значение этого аргумента.
ввод
data = [42, 16, 31, 2, 17]
print(*kind_of_goose(*data), sep='\n')
вывод
(2, 45)
(2, 18)
(2, 33)
(1, 3)
(2, 18)