Функции как способности персонажей: у каждой своё предназначение, и их можно комбинировать для достижения нужного результата!
Они позволяют организовать код, выделяя в нем повторно используемые блоки. Функции могут принимать параметры для работы и возвращать результаты своего выполнения.
# Простая функция без параметров
def cast_elemental_burst():
print("Взрыв стихии!")
return "Анемо урон"
# Функция с параметрами
def calculate_damage(base_atk: float, talent_multiplier: float) -> float:
"""
Рассчитывает урон от атаки.
Args:
base_atk: Базовая атака персонажа
talent_multiplier: Множитель таланта в процентах
Returns:
float: Итоговый урон
"""
return base_atk * (talent_multiplier / 100)
# Возврат одного значения
def check_crit(crit_rate: float) -> bool:
return random() < (crit_rate / 100)
# Возврат нескольких значений
def get_talent_stats(level: int) -> tuple:
base_dmg = 150 + (level * 10)
cooldown = max(15 - level, 8)
energy_cost = 60
return base_dmg, cooldown, energy_cost
# Распаковка возвращаемых значений
damage, cd, energy = get_talent_stats(8)
print(f"Урон: {damage}, перезарядка: {cd}с")
# Проверка возможности применения навыка
def try_use_skill(energy: float, cooldown: float) -> bool:
if cooldown > 0:
print("Навык на перезарядке!")
return False
if energy < 60:
print("Недостаточно энергии!")
return False
print("Применяем навык!")
return True
Создайте систему для расчёта урона от обычной атаки Ху Тао.
Формула для расчёта:
# Базовый урон = (Базовая_АТК + Бонус_АТК) * Множитель_Таланта%
# Крит урон = Базовый_урон * (1 + Крит_УРОН%)
# Финальный урон = (Крит)Урон * (1 + Бонусы%) * (1 - Сопротивление%)
Реализуйте функции для:
def calculate_hutao_damage(
base_atk: float,
bonus_atk: float,
talent_level: int,
crit_rate: float,
crit_dmg: float,
pyro_bonus: float,
enemy_res: float
) -> dict:
"""
Рассчитывает урон от обычной атаки Ху Тао
Возвращает словарь с обычным и критическим уроном
"""
# Множители таланта обычной атаки по уровням
talent_multipliers = {
1: 46.9,
2: 50.7,
# ...
10: 81.8
}