# По числу можно сконструировать строчку из символов следующим образом:
#   >>> 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/Треугольник_Паскаля>