Почему python не отдает 31 января?
Вот эта конструкция в кодеrange(int((end_date - start_date).days))
превращается в вашем случае вrange(30)
и выдает тридцать чисел:
0, 1, 2, 3 ...., 28, 29
Если по-человечески, то 31.01.2019 минус 01.01.2019 будет тридцать суток разницы.
Цикл выполняется 30 раз. От 1 до 30
31-1=30