Модули позволяют организовать код в отдельные файлы для лучшей структуры программы и повторного использования кода.
# Импорт всего модуля
import combat.damage
result = combat.damage.calculate_crit(1500, 50.0)
# Импорт конкретной функции
from combat.damage import calculate_crit
result = calculate_crit(1500, 50.0)
# Импорт с псевдонимом
import combat.damage as dmg
result = dmg.calculate_crit(1500, 50.0)
# Импорт нескольких элементов
from characters.talents import (
normal_attack_dmg,
skill_dmg,
burst_dmg
)
# combat/damage.py
"""
Модуль для расчёта урона.
Содержит функции для вычисления разных типов урона.
"""
def calculate_crit(base_dmg: float, crit_rate: float) -> float:
"""Рассчитывает критический урон"""
return base_dmg * (1 + crit_rate/100)
def calculate_reaction(base_dmg: float, em: int) -> float:
"""Рассчитывает урон элементальной реакции"""
em_bonus = em * 0.0016
return base_dmg * (1 + em_bonus)
# Указываем, что можно импортировать из модуля
__all__ = ['calculate_crit', 'calculate_reaction']
# main.py
from combat.damage import calculate_crit
from characters.character import Character
from characters.talents import normal_attack_dmg
# Создаём персонажа
venti = Character("Венти", "Анемо")
# Рассчитываем урон
base_damage = normal_attack_dmg(venti.attack, venti.talent_level)
crit_damage = calculate_crit(base_damage, venti.crit_rate)
Создайте систему модулей для расчёта урона персонажей:
Подсказка: Пример организации модулей:
# base_stats.py
"""Базовые расчёты характеристик"""
__all__ = ['calculate_base_dmg', 'calculate_def']
def calculate_base_dmg(atk: float, multiplier: float) -> float:
"""Базовый расчёт урона"""
return atk * multiplier
# reactions.py
"""Элементальные реакции"""
from .base_stats import calculate_base_dmg
__all__ = ['calculate_vaporize', 'calculate_melt']
def calculate_vaporize(base_dmg: float, em: int) -> float:
"""Расчёт урона пара"""