Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача python решить

вова дубровский Ученик (81), закрыт 1 год назад
Акка Кнебекайзе долго разглядывала Мартина от кончика клюва до кончика
хвоста и, наконец, сказала:

— Наша стая не может принимать к себе первых встречных. Все. коготы
видишь перед собой, принадлежат к лучшим гусиным семействам. А ты даже
летать как следует не умеешь. Что ты за гусь, какого роду и племени? Как ты
набрался храбрости лететь снами? - удивилась Акка Кнебекайзе,

— Мне очень захотелось посмотреть, что это за Лапландия такая. А заодно я

решил доказать вам, диким гусям, что и мы, домашние гуси, кое на что,
‘Способны.

— Ты смелый гусь - сказала она. - А тот, кто смел, может быть хорошим
товарищем в пути.

Напишите функцию 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)
Лучший ответ
Реципиент Гений (83470) 1 год назад
Работающее решение:
 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)

Вышеприведённый ответ от бота на этом же примере выдаёт неправильный результат (кортежи не в том порядке). Рекомендую прогонять хоть минимальный тест перед тем, как брать решения от новорегов.
вова дубровскийУченик (81) 1 год назад
спасибо
Остальные ответы
⭐ МИНИСТРЕЛИЯ ⭐ Профи (916) 1 год назад
 def kind_of_goose(*args, is_sort=False, smaller=None): 
result = []
for num in args:
digits = len(str(num))
multiple_of_3 = (num // 3 + 1) * 3
if smaller is not None:
multiple_of_3 -= smaller
result.append((digits, multiple_of_3))

if is_sort:
result.sort()
else:
result.sort(reverse=True)

return result

data = [42, 16, 31, 2, 17]
print(*kind_of_goose(*data), sep='\n')
РеципиентГений (83470) 1 год назад
Бред.
⭐ МИНИСТРЕЛИЯ ⭐ Профи (916) Реципиент, программа выдаёт нужный результат? -выдаёт ну тогда закрой своё хлебало и не скули в комментариях.
Похожие вопросы