レーザー兵器のダメージ計算

PythonPythonBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このプロジェクトでは、銀河帝国の兵器研究所が開発した 2 種類の高性能レーザー兵器のダメージ値を計算する方法を学びます。兵器装備実験は、兵器の値をテストする責任があり、あなたはダメージ計算プロセスを実装することで彼らを支援します。

$ python calculate_weapon_damage.py
[3, 2]

🎯 タスク

このプロジェクトでは、以下を学びます。

  • プロジェクト環境を設定し、必要なファイルを作成する方法
  • 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() 関数を実装する

このステップでは、2 種類のレーザー兵器のダメージ値を計算する 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 のダメージ値を計算するロジックを実装します。以下の手順を参考にしてください。

    • 入力配列 test1test2 が正しい長さ(それぞれ 3 要素)であることを確認します。そうでない場合は、空のリスト [] を返します。
    • 入力配列から値を変数 a1, b1, total1 および a2, b2, total2 に展開します。
    • 連立一次方程式を解いて、ダメージ値 x(兵器 A 用)と y(兵器 B 用)を求めます。以下の方程式を使用できます。
    a1 * x + b1 * y = total1
    a2 * x + b2 * y = total2
    • 計算された xy の値を整数に変換し、リスト [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] を渡してみることができます。

おめでとうございます!2 種類のレーザー兵器のダメージ値を計算する calculate_weapon_damage() 関数を正常に実装しました。

✨ 解答を確認して練習

まとめ

おめでとうございます!このプロジェクトを完了しました。あなたのスキルを向上させるために、LabEx でさらに多くの実験を行って練習してください。