Сбалансированное число

У меня есть задача.

Написать функцию balanced_num, которая определяет является ли заданное сбалансированным, т.е.
сумма цифр справа и слева от середины равны (abcde ==> a + b == d + e; abcdef ==> a + b == e + f)
Примеры:
balanced_num(2222) ==> True balanced_num(135622) ==> True

Задача может показаться тривиальной , но я не могу понять имеет ли смысл приводить входные данные к строке и вводить анонимную функцию для разбиения чисел по группам для нахождения сумм ?


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

Автор решения: MaxU

Мне кажется, использовать лямбда функции для данной задачи неуместно, т.к. они получатся длинными и нечитаемыми.

Использовать обычные функции будет более целесообразно.

Вариант решения с преобразованием числа в строку:

def sum_of_digits(num):
    return sum(map(int, str(num)))

def is_balanced(num):
    num_str = str(num)
    mid_idx = len(num_str) // 2
    return (sum_of_digits(num_str[:mid_idx])
            == 
            sum_of_digits(num_str[mid_idx + len(num_str) % 2:]))

Численный вариант решения:

from math import log10, ceil

def sum_of_digits(num):
    res, n = 0, int(num)
    while n > 0:
        res += n % 10
        n //= 10
    return res

def is_balanced(num):
    num_len = ceil(log10(num))
    left_num = num // 10 ** (num_len // 2 + num_len % 2)
    right_num = num % ( 10 ** (num_len // 2))
    return (sum_of_digits(left_num)
            == 
            sum_of_digits(right_num))
→ Ссылка