Конвертация температуры
Условие
Напишите функции для конвертации температуры между Цельсием, Фаренгейтом и Кельвином.
Формулы
C to F: F = C x 9/5 + 32 C to K: K = C + 273.15
Пример
Вход: 0 Celsius Выход: 32 Fahrenheit, 273.15 Kelvin
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение
Анализ задачи
Необходимо разработать функции для конвертации температуры между тремя шкалами: Цельсием (°C), Фаренгейтом (°F) и Кельвином (K). Это типичная задача на алгоритмическое мышление, которая часто встречается в собеседованиях QA Automation Engineer, так как требует понимания математических преобразований и написания надёжного кода.
Решение
Создам набор функций для преобразования температуры в обе стороны между всеми тремя шкалами:
class TemperatureConverter:
"""Класс для конвертации температуры между Цельсием, Фаренгейтом и Кельвином."""
@staticmethod
def celsius_to_fahrenheit(celsius: float) -> float:
"""Конвертирует Цельсий в Фаренгейт."""
return celsius * 9/5 + 32
@staticmethod
def celsius_to_kelvin(celsius: float) -> float:
"""Конвертирует Цельсий в Кельвин."""
return celsius + 273.15
@staticmethod
def fahrenheit_to_celsius(fahrenheit: float) -> float:
"""Конвертирует Фаренгейт в Цельсий."""
return (fahrenheit - 32) * 5/9
@staticmethod
def fahrenheit_to_kelvin(fahrenheit: float) -> float:
"""Конвертирует Фаренгейт в Кельвин."""
celsius = TemperatureConverter.fahrenheit_to_celsius(fahrenheit)
return TemperatureConverter.celsius_to_kelvin(celsius)
@staticmethod
def kelvin_to_celsius(kelvin: float) -> float:
"""Конвертирует Кельвин в Цельсий."""
return kelvin - 273.15
@staticmethod
def kelvin_to_fahrenheit(kelvin: float) -> float:
"""Конвертирует Кельвин в Фаренгейт."""
celsius = TemperatureConverter.kelvin_to_celsius(kelvin)
return TemperatureConverter.celsius_to_fahrenheit(celsius)
@staticmethod
def convert(value: float, from_unit: str, to_unit: str) -> float:
"""Универсальный метод конвертации между любыми единицами."""
units = {"C": "celsius", "F": "fahrenheit", "K": "kelvin"}
if from_unit.upper() not in units or to_unit.upper() not in units:
raise ValueError(f"Неподдерживаемая единица: {from_unit} или {to_unit}")
if from_unit.upper() == to_unit.upper():
return value
# Сначала приводим к Цельсию
if from_unit.upper() == "C":
celsius = value
elif from_unit.upper() == "F":
celsius = (value - 32) * 5/9
else: # K
celsius = value - 273.15
# Затем конвертируем из Цельсия в целевую единицу
if to_unit.upper() == "C":
return celsius
elif to_unit.upper() == "F":
return celsius * 9/5 + 32
else: # K
return celsius + 273.15
Примеры использования
# Прямое использование методов
print(TemperatureConverter.celsius_to_fahrenheit(0)) # Output: 32.0
print(TemperatureConverter.celsius_to_kelvin(0)) # Output: 273.15
# Универсальный метод
print(TemperatureConverter.convert(0, "C", "F")) # Output: 32.0
print(TemperatureConverter.convert(0, "C", "K")) # Output: 273.15
print(TemperatureConverter.convert(32, "F", "C")) # Output: 0.0
Ключевые моменты
Преимущества подхода:
- Инкапсуляция всех методов в одном классе
- Универсальный метод
convert()позволяет конвертировать между любыми единицами - Все формулы выведены математически (обратные преобразования)
- Стабильная точность для стандартных значений
Автоматизация тестирования: Для QA Automation Engineer важно проверить граничные случаи, точность вычислений и обработку некорректных входных данных.