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