介绍
在这个项目中,你将学习如何计算银河帝国武器研究所研发的两种高性能激光武器的伤害值。武器装备实验(Lab)负责测试武器数值,你将通过实现伤害计算过程来帮助他们。
$ python calculate_weapon_damage.py
[3, 2]
🎯 任务
在这个项目中,你将学习:
- 如何设置项目环境并创建必要的文件
- 如何实现
calculate_weapon_damage()函数来计算两种激光武器的伤害值 - 如何使用提供的示例数据测试
calculate_weapon_damage()函数
🏆 成果
完成这个项目后,你将能够:
- 理解激光武器伤害计算的问题描述和要求
- 实现一个函数来求解线性方程组并计算激光武器的伤害值
- 使用不同的输入数据测试实现的函数,以确保其正常工作
- 将你的问题解决和编程技能应用于实际场景
设置项目环境
在这一步中,你将设置项目环境并修改项目所需的文件。
- 在文本编辑器中打开
calculate_weapon_damage.py文件。 - 在文件顶部添加以下导入语句:
from typing import List
这将允许你在代码中使用 List 类型注释。
实现 calculate_weapon_damage() 函数
在这一步中,你将实现 calculate_weapon_damage() 函数来计算两种激光武器的伤害值。
- 在
calculate_weapon_damage.py文件中,定义具有以下签名的calculate_weapon_damage()函数:
def calculate_weapon_damage(test1: List[int], test2: List[int]) -> List[int]:
## 你的代码在这里
pass
实现计算武器 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)]- 检查输入数组
在文件末尾添加以下代码以测试
calculate_weapon_damage()函数:
if __name__ == "__main__":
print(calculate_weapon_damage([4, 5, 22], [3, 2, 13]))
运行脚本时,这将打印出计算出的伤害值。
测试 calculate_weapon_damage() 函数
在这一步中,你将使用提供的示例数据测试 calculate_weapon_damage() 函数。
- 保存
calculate_weapon_damage.py文件。 - 打开一个终端并导航到
/home/labex/project目录。 - 运行
calculate_weapon_damage.py脚本:
python calculate_weapon_damage.py
你应该会看到输出 [3, 2],这是给定示例数据的预期结果。
- 尝试使用其他输入数据测试该函数,以确保它能正确工作。例如,你可以尝试传入
[4, 5, 22]和[3, 2, 14],看看该函数是否会因为输入无效而返回空列表[]。
恭喜你!你已成功实现 calculate_weapon_damage() 函数来计算两种激光武器的伤害值。
总结
恭喜你!你已完成这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。



