Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Центр помощи
  • » Попросили использовать метод ** в строке, но как им воспользоваться совсем не понимаю. Строка return self.MSG_STR.format(*asdict(self).values()). [RSS Feed]

#1 Окт. 13, 2022 18:39:16

donchios
Зарегистрирован: 2022-10-13
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Попросили использовать метод ** в строке, но как им воспользоваться совсем не понимаю. Строка return self.MSG_STR.format(*asdict(self).values()).

 from dataclasses import asdict, dataclass
from typing import ClassVar, Dict, Type
@dataclass
class InfoMessage:
    """Информационное сообщение о тренировке."""
    training_type: str
    duration: float
    distance: float
    speed: float
    calories: float
    MSG_STR: ClassVar[str] = (
        'Тип тренировки: {}; is  '
        'Длительность: {:.3f} ч.; '
        'Дистанция: {:.3f} км; '
        'Ср. скорость: {:.3f} км/ч; '
        'Потрачено ккал: {:.3f}.'
    )
    def get_message(self) -> str:
        """Получить строку сообщения."""
        return self.MSG_STR.format(*asdict(self).values())
        
@dataclass
class Training:
    """Базовый класс тренировки."""
    action: int
    duration: float
    weight: float
    M_IN_KM: ClassVar[float] = 1000
    M_IN_HOUR: ClassVar[float] = 60
    LEN_STEP: ClassVar[float] = 0.65
    def get_distance(self) -> float:
        """Получить дистанцию в км."""
        return self.action * self.LEN_STEP / self.M_IN_KM
    def get_mean_speed(self) -> float:
        """Получить среднюю скорость движения."""
        return self.get_distance() / self.duration
    def get_spent_calories(self) -> float:
        """Получить количество затраченных калорий."""
        pass
    def show_training_info(self) -> InfoMessage:
        """Вернуть информационное сообщение о выполненной тренировке."""
        return InfoMessage(self.__class__.__name__,
                           self.duration,
                           self.get_distance(),
                           self.get_mean_speed(),
                           self.get_spent_calories())
@dataclass
class Running(Training):
    """Тренировка: бег."""
    calories_mean_speed_multiplier: ClassVar[float] = 18
    calories_mean_speed_subtrahend: ClassVar[float] = 20
    def get_spent_calories(self) -> float:
        """Получить количество затраченных калорий при беге."""
        return (self.calories_mean_speed_multiplier * self.get_mean_speed()
                - self.calories_mean_speed_subtrahend
                ) * self.weight / self.M_IN_KM * self.duration * self.M_IN_HOUR
@dataclass
class SportsWalking(Training):
    """Тренировка: спортивная ходьба."""
    calories_weight_multiplier: ClassVar[float] = 0.035
    calories_speed_height_weight_multiplier: ClassVar[float] = 0.029
    height: float
    def get_spent_calories(self) -> float:
        """Получить количество затраченных калорий при спортивной ходьбе."""
        return (self.calories_weight_multiplier
                * self.weight
                + (self.get_mean_speed() ** 2 // self.height)
                * self.calories_speed_height_weight_multiplier * self.weight
                ) * self.duration * self.M_IN_HOUR
@dataclass
class Swimming(Training):
    """Тренировка: плавание."""
    LEN_STEP: ClassVar[float] = 1.38
    length_pool: float
    count_pool: float
    def get_mean_speed(self) -> float:
        """Получить среднюю скорость плавания."""
        return (self.length_pool * self.count_pool
                / self.M_IN_KM / self.duration
                )
    def get_spent_calories(self) -> float:
        """Получить количество затраченных калорий при плавании."""
        NUM_1 = 1.1
        NUM_2 = 2
        return (self.get_mean_speed() + NUM_1) * NUM_2 * self.weight
def read_package(workout_type: str, data: list) -> Training:
    """Прочитать данные полученные от датчиков."""
    workouts: Dict[str, Type[Training]] = {
        'RUN': Running,
        'WLK': SportsWalking,
        'SWM': Swimming
    }
    return workouts[workout_type](*data)
def main(training: Training) -> None:
    """Главная функция."""
    info = training.show_training_info()
    print(info.get_message())
if __name__ == '__main__':
    packages = [
        ('SWM', [720, 1, 80, 25, 40]),
        ('RUN', [15000, 1, 75]),
        ('WLK', [9000, 1, 75, 180]),
    ]
    for workout_type, data in packages:
        training = read_package(workout_type, data)
        main(training)

Офлайн

#2 Окт. 13, 2022 18:41:16

donchios
Зарегистрирован: 2022-10-13
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Попросили использовать метод ** в строке, но как им воспользоваться совсем не понимаю. Строка return self.MSG_STR.format(*asdict(self).values()).

  return self.MSG_STR.format(*asdict(self).values())
Отсюда нужна помощь с реализацией **

Офлайн

  • Начало
  • » Центр помощи
  • » Попросили использовать метод ** в строке, но как им воспользоваться совсем не понимаю. Строка return self.MSG_STR.format(*asdict(self).values()).[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version