# По числу можно сконструировать строчку из символов следующим образом:
# >>> x = 12345
# >>> x
# 12345
# >>> xs = str(x)
# >>> xs
# '12345'
# Дальше можно работать с отдельными символами строки:
# >>> xs[0]
# '1'
# >>> xs[1]
# '2'
# Чтобы получить из строк с цифрами числа, можно написать так:
# >>> int(xs[0])
# 1
# >>> int(xs[1])
# 2
# Тогда получить список из цифр можно следующим образом:
# digits = []
# for digit_str in str(x):
# digits.append(int(digit_str)) # добавить в конец списка цифру
#
# Также можно воспользоваться функцией map(функция, последовательность),
# которая применяет функцию к каждому элементу последовательности и возвращает
# последовательность из результатов:
# list(map(f, [1, 2, 3])) -> [f(1), f(2), f(3)]
#
# digits = list(map(int, str(x)))
#
# Или же можно воспользоваться list comprehension для генерации списка:
# [выражение for переменная in последовательность]
# создаст список из результатов вычисления выражений зависимых от переменной,
# где переменная принимает значения из последовательности.
# Например:
# [v**2 for v in [1, 2, 3, 4]]
# создаст список из квадратов чисел из списка [1, 2, 3, 4]:
# [1, 4, 9, 16]
#
# Тогда цифры можно получить следующим образом:
# digits = [int(v) for v in str(x)]
def sum_of_digits(x):
"""Вычисляет сумму цифр числа"""
# Получаем список из цифр:
digits = map(int, str(x))
# можно просуммировать обычным, Си-подобным, способом:
# sum = 0
# for digit in digits:
# sum += digit
# return sum
# Но лучше воспользоваться функцией sum(послед.), которая вычисляет сумму
# элементов последовательности:
# sum([1, 2, 3]) -> 1 + 2 + 3 = 6
return sum(digits)
print("sum_of_digits(1) =", sum_of_digits(1))
print("sum_of_digits(23) =", sum_of_digits(23))
print("sum_of_digits(123456789) =", sum_of_digits(123456789))
# Задания:
#
# 1. Напишите функцию is_palindrom(x), проверяющую, является ли число x
# палиндромом [1]. Число x — палиндром, если его цифры читаются одинаково
# слева на право и справа налево, например 123321 — это палиндром, а
# 123456 — нет.
#
# 2. Найдите все числа-палиндромы от 1 до 10000.
#
# 3. Напишите функцию biggest_number(x), которая возвращает наибольшее число,
# составленное из тех же цифр.
#
# 4. Посчитайте количество 6-значных счастливых билетов [2]: шестизначных чисел
# с ведущими нулями (от 000000 до 999999), в которых сумма цифр, стоящих на
# четных позициях, равна сумме цифр на нечётных позициях. Например 342870,
# сумма цифр, стоящих на четных позициях, 3 + 2 + 7 == 12, равна сумме цифр на
# нечетных позициях, 4 + 8 + 0 = 12.
#
# 5. Выведите последние 10 счастливых билетов.
#
# 6. Напишите функцию pascal_triangle(n), которая выводит на экран треугольник
# Паскаля [3] высоты n:
#
# 1
# 1 1
# 1 2 1
# 1 3 3 1
# 1 4 6 4 1
#
# В нём на самое левое и правые числа — единицы, а все остальные
# представляют собой сумму двух вышестоящих. Ряд треугольника сохраняйте в
# списке, а следующий ряд вычисляете используя предыдущий. (Числа на экране
# можно не форматировать так, чтобы они выглядели как треугольник.)
# Ссылки:
# [1] Палиндром: <https://ru.wikipedia.org/wiki/Палиндром>
# [2] Счастливый билет: <https://ru.wikipedia.org/wiki/Счастливый_билет>
# [3] Треугольник Паскаля: <https://ru.wikipedia.org/wiki/Треугольник_Паскаля>