Скорее всего замудрил с первой функции

Замудрил с первой функции, все работает, но можно было сделать и попроще наверное.... Напишите функцию, которая может принимать произвольное количество аргументов (целых чисел), и определять сколько среди них двузначных и трехзначных чисел. Определение количества разрядов в числе также оформить в виде отдельной функции.

 def discharge(*args):
     s = {}
     k = 0
     t = 0
     for i in args:
         n = str(i)
         if len(n) == 3:
             k += 1
         elif len(n) == 2:
             t += 1
     s.update({'Всего трехзначных чисел': k, 'Всего двухзначных чисел': 
       t})
     return s

    def digit(*args):
        s = {}
        for i in args:
            n = str(i)
            len_n = len(n)
            s.update({i: len_n})
        return s

    print(discharge(3,2,86,1423, 4234, 25, 332))
    print(digit(3,2,86,1423, 4234, 25, 332))

Ответы (1 шт):

Автор решения: Александр Рассказчиков

Вариант проще

def discharge(*args):
    k, t = 0, 0
    for i in args:
        n = digits_amount(i)
        if n == 3:
            k += 1
        elif n == 2:
            t += 1
    return {'Всего трехзначных чисел': k, 'Всего двухзначных чисел': t}


def digits_amount(n):
    return len(str(n))


print(discharge(3, 2, 86, 1423, 4234, 25, 332))

Вариант красивее

def discharge(*args):
    k, t = [len(list(filter(lambda x: digits_amount(x) == z, args))) for z in (3, 2)]
    return {'Всего трехзначных чисел': k, 'Всего двухзначных чисел': t}


def digits_amount(n):
    return len(str(n))


print(discharge(3, 2, 86, 1423, 4234, 25, 332))
→ Ссылка