Python代码:将相同目标对应不同武器写入Excel表
使用Python将相同目标对应不同武器写入Excel表
本代码演示如何使用Python和Pandas库,将Excel文件中相同目标对应不同的武器信息写入新的Excel表。
假设有两个Excel文件:
- 武器的打击范围和坐标: 存储每个武器的名称、打击范围和坐标信息。
- 读取被打击目标的坐标: 存储每个目标的名称和坐标信息。
代码将会根据武器的打击范围和目标坐标判断哪个武器能够打击目标,并将结果写入新的Excel表。
代码示例
import pandas as pd
import math
# 读取Excel文件中的武器和目标数据
wb_weapons = pd.read_excel('C://Users//asus//OneDrive//桌面//武器的打击范围和坐111标.xlsx', sheet_name='Weapons')
wb_targets = pd.read_excel('C://Users//asus//OneDrive//桌面//读取被打击目标的坐标.xlsx', sheet_name='Targets')
# 转换数据为DataFrame格式
df_weapons = pd.DataFrame(wb_weapons)
df_targets = pd.DataFrame(wb_targets)
# 创建结果DataFrame
df_results = pd.DataFrame(columns=['Target', 'Weapon'])
# 筛选每个被打击目标能被哪些武器打击
for target_name in df_targets['Name'].unique():
target_rows = df_targets[df_targets['Name'] == target_name]
target_coordinates = (target_rows.iloc[0]['X'], target_rows.iloc[0]['Y'])
weapon_name = None # 存储能打击目标的武器名称
for weapon_idx, weapon_row in df_weapons.iterrows():
weapon_name = weapon_row['Weapon']
weapon_range = weapon_row['Range']
weapon_coordinates = (weapon_row['X'], weapon_row['Y'])
distance = math.sqrt((weapon_coordinates[0] - target_coordinates[0])**2 + (weapon_coordinates[1] - target_coordinates[1])**2)
if distance <= weapon_range:
break
# 将每个被打击目标和对应的武器添加到结果DataFrame中
df_results = df_results.append({'Target': target_name, 'Weapon': weapon_name}, ignore_index=True)
# 将结果写入Excel文件
with pd.ExcelWriter('目标点对应武器.xlsx') as writer:
df_results.to_excel(writer, sheet_name='Results', index=False)
代码解释
- 导入必要的库:
pandas用于处理数据,math用于计算距离。 - 读取数据: 使用
pd.read_excel()读取武器和目标数据,并将其转换为 DataFrame 格式。 - 创建结果 DataFrame: 创建一个空的 DataFrame 用于存储结果。
- 遍历每个目标: 使用循环遍历每个目标,并获取其坐标信息。
- 遍历每个武器: 对每个目标,使用循环遍历每个武器,并根据距离判断武器是否可以打击目标。
- 写入结果: 将每个目标和对应的武器信息添加到结果 DataFrame 中。
- 保存结果: 使用
pd.ExcelWriter()将结果 DataFrame 写入新的 Excel 文件中。
注意
- 代码中的文件名、工作表名称和列名是基于假设的Excel文件中的数据位置,你需要根据实际情况进行相应的修改。
- 你可以根据需要调整结果写入的逻辑和格式,以满足你的需求。
代码功能
这段代码实现了将Excel文件中相同目标对应不同武器的信息写入新的Excel表的功能。它通过计算武器和目标之间的距离,判断哪个武器能够打击目标,并将其信息写入新的Excel表。该代码适用于需要分析不同武器对不同目标的打击能力的场景。
原文地址: https://www.cveoy.top/t/topic/OPO 著作权归作者所有。请勿转载和采集!