레이저 무기 데미지 계산

PythonBeginner
지금 연습하기

소개

이 프로젝트에서는 은하 제국의 무기 연구소에서 개발한 두 개의 고성능 레이저 무기의 데미지 값을 계산하는 방법을 배우게 됩니다. 무기 장비 연구소는 무기 값 테스트를 담당하며, 여러분은 데미지 계산 프로세스를 구현하여 이를 돕게 됩니다.

$ python calculate_weapon_damage.py
[3, 2]

🎯 과제

이 프로젝트에서 다음을 배우게 됩니다:

  • 프로젝트 환경을 설정하고 필요한 파일을 만드는 방법
  • 두 레이저 무기의 데미지 값을 계산하기 위해 calculate_weapon_damage() 함수를 구현하는 방법
  • 제공된 예제 데이터를 사용하여 calculate_weapon_damage() 함수를 테스트하는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • 레이저 무기 데미지 계산에 대한 문제 설명 및 요구 사항 이해
  • 선형 방정식 시스템을 해결하고 레이저 무기의 데미지 값을 계산하는 함수 구현
  • 올바르게 작동하는지 확인하기 위해 다양한 입력 데이터를 사용하여 구현된 함수 테스트
  • 실제 시나리오에 문제 해결 및 프로그래밍 기술 적용

프로젝트 환경 설정

이 단계에서는 프로젝트 환경을 설정하고 프로젝트에 필요한 파일을 수정합니다.

  1. 텍스트 편집기에서 calculate_weapon_damage.py 파일을 엽니다.
  2. 파일 상단에 다음 import 문을 추가합니다:
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]:
    ## Your code here
    pass
  1. Weapon A 와 Weapon B 의 데미지 값을 계산하는 로직을 구현합니다. 다음 단계를 가이드로 사용할 수 있습니다:

    • 입력 배열 test1test2가 올바른 길이 (각각 3 개의 요소) 를 갖는지 확인합니다. 그렇지 않으면 빈 목록 []을 반환합니다.
    • 입력 배열의 값을 a1, b1, total1a2, b2, total2 변수로 언팩합니다.
    • 선형 방정식 시스템을 풀어 데미지 값 x (Weapon A) 와 y (Weapon 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]를 전달하여 함수가 잘못된 입력으로 인해 빈 목록 []을 반환하는지 확인할 수 있습니다.

축하합니다! 두 레이저 무기의 데미지 값을 계산하는 calculate_weapon_damage() 함수를 성공적으로 구현했습니다.

✨ 솔루션 확인 및 연습

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.