# Напишите программу для вычисления факториала.
# Область допустимых значений для вычисления - множество натуральных чисел N
# Программа должна состоять из двух функций:


def main():
    """
    
    Главная функция для запуска

    Позволяет пользователю:
    - ввести значение с клавиатуры;
    - запустить на выполнение фунцкцию factorial();
    - вывести на экран в понятном виде результат вычислений.

    """

    n = input("Введите значение для вычисления факториала: ")

    res = factorial(n)

    print(res)


def factorial(n):
    """
    Функция для вычисления факториала

    Принимает натуральное число и возвращает его факториал
    """
    k = 0
    for i in n:
        k *= i
    pass

    # необходимо проверить на ОДЗ и попытаться преобразовать значение в нужный тип
    # "падает", если пришло значение неверного типа или 
    # возвращает значение факториала от числа


# Требуется протестировать вычисление факториала с помощью библиотек doctest и unittest, тесты расположить в отдельных файлах (test-doctest-*.py, test-unittest-*.py)

# Попробуем преобразовать полученное от пользователя с клавиатуры значение в целочисленный тип данных. 
# если в качестве аргумента будет значение типа float, то будет отброшена дробная часть, 

print(int(1.10003985)) # 1

# однако, если будет передано строковое значение 
print(int("1.10003985")) # будет ошибка 
# ValueError: invalid literal for int() with base 10: '1.10003985'


try:
    n = int(n)  # if ошибка произошла
except:  # выполнить код после except
    print('Какая-то ошибка произошла!')
# в противном случае выполни код ниже

if type(n) is not int:
    raise ValueError('введено значение неверного типа')

print('Все хорошо! n = ', n)
