Расчет урона лазерного оружия

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом проекте вы научитесь вычислять значения урона двух высокопроизводительных лазерных оружий, разработанных исследовательским институтом вооружений Галактической Империи. Лаборатория вооружений отвечает за тестирование значений оружия, и вы поможете им, реализовав процесс вычисления урона.

$ python calculate_weapon_damage.py
[3, 2]

🎯 Задачи

В этом проекте вы научитесь:

  • настраивать проектную среду и создавать необходимые файлы;
  • реализовывать функцию calculate_weapon_damage() для вычисления значений урона двух лазерных оружий;
  • тестировать функцию calculate_weapon_damage() с использованием предоставленных примеров данных.

🏆 Достижения

После завершения этого проекта вы сможете:

  • понять постановку задачи и требования к вычислению урона лазерного оружия;
  • реализовать функцию для решения системы линейных уравнений и вычислить значения урона лазерных оружий;
  • протестировать реализованную функцию с различными входными данными, чтобы убедиться, что она работает правильно;
  • применить свои навыки решения задач и программирования в реальном сценарии.

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python/BasicConceptsGroup -.-> python/variables_data_types("Variables and Data Types") python/BasicConceptsGroup -.-> python/type_conversion("Type Conversion") python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FunctionsGroup -.-> python/arguments_return("Arguments and Return Values") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") subgraph Lab Skills python/variables_data_types -.-> lab-302697{{"Расчет урона лазерного оружия"}} python/type_conversion -.-> lab-302697{{"Расчет урона лазерного оружия"}} python/lists -.-> lab-302697{{"Расчет урона лазерного оружия"}} python/function_definition -.-> lab-302697{{"Расчет урона лазерного оружия"}} python/arguments_return -.-> lab-302697{{"Расчет урона лазерного оружия"}} python/importing_modules -.-> lab-302697{{"Расчет урона лазерного оружия"}} python/catching_exceptions -.-> lab-302697{{"Расчет урона лазерного оружия"}} end

Настройка проектной среды

В этом шаге вы настроите проектную среду и измените необходимые файлы для проекта.

  1. Откройте файл calculate_weapon_damage.py в текстовом редакторе.
  2. В начале файла добавьте следующий импорт:
from typing import List

Это позволит вам использовать аннотацию типа List в своем коде.

Реализация функции calculate_weapon_damage()

В этом шаге вы реализуете функцию calculate_weapon_damage() для вычисления значений урона двух лазерных оружий.

  1. Внутри файла calculate_weapon_damage.py определите функцию calculate_weapon_damage() с сигнатурой:
def calculate_weapon_damage(test1: List[int], test2: List[int]) -> List[int]:
    ## Ваш код здесь
    pass
  1. Реализуйте логику для вычисления значений урона оружия A и оружия B. В качестве руководства вы можете использовать следующие шаги:

    • Проверьте, имеют ли входные массивы test1 и test2 правильную длину (по 3 элемента каждому). Если нет, верните пустой список [].
    • Распакуйте значения из входных массивов в переменные a1, b1, total1 и a2, b2, total2.
    • Решите систему линейных уравнений, чтобы найти значения урона x (для оружия A) и y (для оружия B). Вы можете использовать следующие уравнения:
    a1 * x + b1 * y = total1
    a2 * x + b2 * y = total2
    • Преобразуйте вычисленные значения x и y в целые числа и верните их в виде списка [x, y].
    • Если при решении уравнений возникает ZeroDivisionError, верните пустой список [].

    Код выглядит так:

     def calculate_weapon_damage(test1: List[int], test2: List[int]) -> List[int]:
         if len(test1)!= 3 or len(test2)!= 3:
             return []
    
         a1, b1, total1 = test1
         a2, b2, total2 = test2
    
         ## a1 * x + b1 * y = total1
         ## a2 * x + b2 * y = total2
         try:
             y = (total1 * a2 - total2 * a1) / (b1 * a2 - b2 * a1)
             x = (total1 - b1 * y) / a1
         except ZeroDivisionError:
             return []
    
         return [int(x), int(y)]
  2. Добавьте в конец файла следующий код для тестирования функции calculate_weapon_damage():

if __name__ == "__main__":
    print(calculate_weapon_damage([4, 5, 22], [3, 2, 13]))

Это выведет вычисленные значения урона при запуске скрипта.

Тестирование функции calculate_weapon_damage()

В этом шаге вы будете тестировать функцию calculate_weapon_damage() с использованием предоставленных примеров данных.

  1. Сохраните файл calculate_weapon_damage.py.
  2. Откройте терминал и перейдите в директорию /home/labex/project.
  3. Запустите скрипт calculate_weapon_damage.py:
python calculate_weapon_damage.py

Вы должны увидеть вывод [3, 2], который является ожидаемым результатом для заданных примеров данных.

  1. Попробуйте протестировать функцию с другими входными данными, чтобы убедиться, что она работает правильно. Например, вы можете попробовать передать [4, 5, 22] и [3, 2, 14], чтобы увидеть, возвращает ли функция пустой список [] из-за некорректного ввода.

Поздравляем! Вы успешно реализовали функцию calculate_weapon_damage() для вычисления значений урона двух лазерных оружий.

✨ Проверить решение и практиковаться

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.