match-case - как система элементальных реакций: проверяет различные комбинации и выбирает подходящий результат! Эта конструкция позволяет сопоставлять проверяемое значение с различными вариантами, и выполнять код в зависимости от совпадения.
# Простой пример с элементами
element = "Пиро"
match element:
case "Пиро":
reaction = "Горение"
case "Гидро":
reaction = "Пар"
case "Электро":
reaction = "Перегрузка"
case _: # Аналог default в switch
reaction = "Нет реакции"
# Проверка артефакта
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)
}
# Другие случаи...