Untitled

mail@pastecode.io avatar
unknown
python
a year ago
3.3 kB
29
Indexable
Never
import datetime as dt

FORMAT = '%H:%M:%S'  # Запишите формат полученного времени.
WEIGHT = 75  # Вес.
HEIGHT = 175  # Рост.
K_1 = 0.035  # Коэффициент для подсчета калорий.
K_2 = 0.029  # Коэффициент для подсчета калорий.
STEP_M = 0.65  # Длина шага в метрах.

storage_data = {}


def check_correct_data(data):
    if data is None:
        return False

    if len(data) != 2:
        return False

    if data[0] is None:
        return False

    if data[1] is None:
        return False

    return True


def check_correct_time(time):
    if storage_data and time <= max(storage_data.keys()):
        return False

    return True


def get_step_day(steps):
    count_steps = 0
    if len(storage_data) != 0:
        count_steps += sum(storage_data.values())

    return count_steps + steps


def get_distance(steps):
    dist_in_m = steps * STEP_M
    dist_in_km = dist_in_m / 1000
    return dist_in_km


def get_spent_calories(dist, current_time):
    total_minutes = current_time.hour * 60 + current_time.minute
    mean_speed = dist / (total_minutes / 60)

    spent_calories = (0.035 * WEIGHT + (mean_speed ** 2 / HEIGHT) * 0.029 * WEIGHT) * total_minutes
    return spent_calories


def get_achievement(dist):
    """Получить поздравления за пройденную дистанцию."""
    if dist >= 6.5:
        return 'Отличный результат! Цель достигнута.'

    if dist >= 3.9:
        return 'Неплохо! День был продуктивный'

    if dist >= 2:
        return 'Завтра наверстаем!'

    return 'Лежать тоже полезно. Главное — участие, а не победа!'


def show_message(current_time, day_steps, distance, calories, achievment):
    message = f'\nВремя: {current_time.time()}.\n' \
              f'Количество шагов за сегодня: {day_steps}.\n' \
              f'Дистанция составила {distance:.2f} км.\n' \
              f'Вы сожгли {calories:.2f} ккал.\n' \
              f'{achievment}\n'
    print(message)


def accept_package(data):
    if not check_correct_data(data):  # Если функция проверки пакета вернет False
        return 'Некорректный пакет'
    pack_time = dt.datetime.strptime(data[0], FORMAT)  # Преобразуйте строку с временем в объект типа time.
    if not check_correct_time(pack_time):
        return 'Некорректное значение времени'

    day_steps = get_step_day(data[1])
    dist = get_distance(day_steps)
    spent_calories = get_spent_calories(dist, pack_time)
    achievement = get_achievement(dist)

    show_message(pack_time, day_steps, dist, spent_calories, achievement)
    storage_data[pack_time] = data[1]

    return storage_data


# Данные для самопроверки.Не удаляйте их.
package_0 = ('2:00:01', 505)
package_1 = (None, 3211)
package_2 = ('9:36:02', 15000)
package_3 = ('9:36:02', 9000)
package_4 = ('8:01:02', 7600)

accept_package(package_0)
accept_package(package_1)
accept_package(package_2)
accept_package(package_3)
accept_package(package_4)