✧ Оператор match-case в Python ✧

🎯 Теория: match-case в Python 3.10+

match-case - как система элементальных реакций: проверяет различные комбинации и выбирает подходящий результат! Эта конструкция позволяет сопоставлять проверяемое значение с различными вариантами, и выполнять код в зависимости от совпадения.

Базовый синтаксис:

# Простой пример с элементами
element = "Пиро"

match element:
    case "Пиро":
        reaction = "Горение"
    case "Гидро":
        reaction = "Пар"
    case "Электро":
        reaction = "Перегрузка"
    case _:  # Аналог default в switch
        reaction = "Нет реакции"

Сопоставление с условиями (guard):

# Проверка артефакта
def check_artifact(artifact):
    match artifact:
        case {"rarity": 5, "level": level} if level >= 20:
            return "Максимально улучшенный золотой"
        case {"rarity": 5}:
            return "Золотой, можно улучшать"
        case {"rarity": 4}:
            return "Фиолетовый"
        case _:
            return "Не подходит для прокачки"

Сопоставление последовательностей:

# Проверка команды персонажей
def check_team(team):
    match team:
        case [a, b, *_] if {a, b} == {"Пиро", "Пиро"}:
            return "Пиро резонанс: +25% к атаке"
        case [a, b, c, d] if len({a, b, c, d}) == 4:
            return "Все элементы разные"
        case [*elements] if len(elements) < 4:
            return "Неполная команда"
        case _:
            return "Обычная команда"

Сопоставление с вложенными структурами:

# Анализ характеристик персонажа
def analyze_build(character):
    match character:
        case {
            "weapon": {"type": "Лук", "refinement": 5},
            "artifacts": {"set": set_name, "count": count}
        } if count >= 4:
            return f"Полный сет {set_name} с Р5 луком"
            
        case {"talents": {"normal": n, "skill": s, "burst": b}}:
            return f"Таланты {n}/{s}/{b}"
            
        case {"constellation": c}:
            return f"C{c}"
            
        case _:
            return "Недостаточно данных"

⚔️ Задача: Система элементальных реакций

Создайте систему для определения элементальных реакций с использованием match-case.

Входные данные:

# Словарь с описанием применения элемента
reaction_data = {
    "element": "Пиро",
    "target": {
        "affected_by": "Гидро",
        "duration": 7,
        "gauge": 1.5
    },
    "em": 280  # Мастерство стихий
}

Реализуйте функцию, которая:

💡 Подсказка:

def process_reaction(data):
    match data:
        case {
            "element": "Пиро",
            "target": {"affected_by": "Гидро", "gauge": g},
            "em": em
        }:
            multiplier = 1.5
            em_bonus = em * 0.0016
            return {
                "type": "Пар",
                "multiplier": multiplier * (1 + em_bonus)
            }
        # Другие случаи...
⟵ Тернарный оператор Цикл for и функция range ⟶