Слайд 3: Практическое применение параметров функций

Примеры использования разных типов параметров

Обязательные и необязательные параметры:

def calculate_skill_damage(
    base_atk: float,           # обязательный
    talent_level: int,         # обязательный
    *,                         # разделитель
    hold: bool = False,        # необязательный именованный
    charged: bool = False      # необязательный именованный
) -> float:
    """Рассчитывает урон от Небесной поэзии"""
    multiplier = 380.0 if hold else 276.0
    return base_atk * (multiplier / 100)

# Примеры вызова:
tap_damage = calculate_skill_damage(2000, 8)
hold_damage = calculate_skill_damage(2000, 8, hold=True)

Типизация и проверка элементов:

from typing import List, Optional

def swirl_reaction(
    element: str,
    base_dmg: float,
    *,
    em: int = 0,
    affected_enemies: Optional[List[str]] = None
) -> float:
    """
    Рассчитывает урон вихря с учетом мастерства стихий
    
    Args:
        element: Поглощенный элемент
        base_dmg: Базовый урон реакции
        em: Мастерство стихий
        affected_enemies: Список противников под действием элемента
    """
    if element not in ["Пиро", "Гидро", "Электро", "Крио"]:
        raise ValueError("Недопустимый элемент для вихря")
        
    em_bonus = em * 0.0016  # Формула повышения урона от мастерства
    enemy_count = len(affected_enemies) if affected_enemies else 1
    
    return base_dmg * (1 + em_bonus) * enemy_count

Использование *args и **kwargs:

def apply_team_buffs(
    base_damage: float,
    *resistance_shreds: float,  # Снижения сопротивлений
    **damage_bonuses: float     # Баффы урона
) -> float:
    """
    Применяет командные баффы к базовому урону
    
    Args:
        base_damage: Базовый урон
        *resistance_shreds: Снижения сопротивления (VV, Чжун Ли и т.д.)
        **damage_bonuses: Именованные баффы урона
    """
    total_res_shred = sum(resistance_shreds)
    total_dmg_bonus = sum(damage_bonuses.values())
    
    return base_damage * (1 - total_res_shred) * (1 + total_dmg_bonus)

Задача: Система расчёта урона "Великой оды ветру"

Создайте систему расчёта урона для взрыва стихии Венти. Необходимо учесть все возможные модификаторы урона.

Базовые характеристики "Великой оды ветру":

Требования к функции:

Подсказка: Примеры использования разных типов параметров:

from typing import Optional, Dict, Union

def calculate_burst_damage(
    base_atk: float,
    talent_level: int,
    *,
    absorbed_element: Optional[str] = None,
    enemy_res: float = 0.1,
    **buffs: Dict[str, float]
) -> Dict[str, Union[float, str]]:
    """
    Рассчитывает урон взрыва стихии с учётом всех модификаторов
    """
    # Основная логика расчёта