生成战斗报告

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个项目中,你将学习如何根据提供的数据文件生成战斗报告。战斗报告将总结在三个不同敌方基地发生的战斗的关键信息,包括战斗ID、价值、总参与者、受伤人数、死亡人数和阵亡英雄。

👀 预览

战斗报告

🎯 任务

在这个项目中,你将学习:

  • 如何读取和理解包含战斗信息的数据文件
  • 如何实现 auto_generate_report 函数来生成战斗报告
  • 如何通过额外的格式设置和信息来增强战斗报告
  • 如何测试和完善战斗报告以确保它符合要求

🏆 成果

完成这个项目后,你将能够:

  • 高效地读取和处理CSV文件中的数据
  • 实现一个函数来生成结构化且信息丰富的报告
  • 展示你按照逐步说明完成编码项目的能力
  • 提升你在数据处理、格式化和报告方面的技能

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/DataScienceandMachineLearningGroup(["Data Science and Machine Learning"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FunctionsGroup -.-> python/lambda_functions("Lambda Functions") python/ModulesandPackagesGroup -.-> python/using_packages("Using Packages") python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") python/FileHandlingGroup -.-> python/file_reading_writing("Reading and Writing Files") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") python/DataScienceandMachineLearningGroup -.-> python/data_analysis("Data Analysis") subgraph Lab Skills python/function_definition -.-> lab-302731{{"生成战斗报告"}} python/lambda_functions -.-> lab-302731{{"生成战斗报告"}} python/using_packages -.-> lab-302731{{"生成战斗报告"}} python/catching_exceptions -.-> lab-302731{{"生成战斗报告"}} python/file_reading_writing -.-> lab-302731{{"生成战斗报告"}} python/data_collections -.-> lab-302731{{"生成战斗报告"}} python/data_analysis -.-> lab-302731{{"生成战斗报告"}} end

读取并理解数据文件

在这一步中,你将学习如何读取并理解为该项目提供的数据文件。

三个基地的数据文件分别命名为 A.csvB.csvC.csv。每行数据包含以下信息:

  • id:战斗的ID编号。
  • value:战斗目标的价值。
  • total:我方参与战斗的总人数。
  • injured:我方在战斗中的受伤总人数。
  • dead:我方在战斗中的死亡人数。
  • hero:战斗中阵亡者的ID编号。

实现 auto_generate_report 函数

在这一步中,你将实现 auto_generate_report 函数来生成战斗报告。

打开 auto_generate_report.py 文件。在 auto_generate_report.py 文件中,auto_generate_report 函数应以文件路径列表作为输入,并返回作为字符串的战斗报告。该函数应从每个文件中读取数据,按 value 字段降序排序,然后生成战斗报告。

以下是 auto_generate_report 函数的初始代码:

def auto_generate_report(file_paths):
    report = "战斗报告如下:\n"

    for file_path in file_paths:
        with open(file_path, "r") as file:
            reader = csv.DictReader(file)
            data = list(reader)

        data.sort(key=lambda x: int(x["value"]), reverse=True)

        base_name = file_path.split("/")[-1].split(".")[0].upper()
        report += (
            f"在基地 {base_name} 发生的战斗,按价值排序,如下所示:\n"
        )
        for row in data:
            report += f"战斗ID:{row['id']},价值:{row['value']},本次战斗的总参与者:{row['total']},受伤:{row['injured']},死亡:{row['dead']}。"
            if row["dead"] == "0":
                report += " 阵亡英雄:无。\n"
            else:
                report += f" 阵亡英雄:{row['hero']}。\n"

    return report

要完成实现,你需要:

  1. 添加错误处理,以防文件路径无效或文件无法读取。
  2. 确保报告格式一致且易于阅读。
  3. 使用提供的示例输入测试 auto_generate_report 函数,并验证输出是否符合预期格式。

测试并完善战斗报告

在这最后一步中,你将使用提供的示例输入测试 auto_generate_report 函数,并根据需要完善报告。

  1. 通过运行以下代码来测试该函数:
if __name__ == "__main__":
    file_paths = [
        "/home/labex/project/A.csv",
        "/home/labex/project/B.csv",
        "/home/labex/project/C.csv",
    ]
    print(auto_generate_report(file_paths))

这将根据提供的文件中的数据生成战斗报告。

  1. 使用以下命令运行脚本:

    python auto_generate_report.py
战斗报告
  1. 仔细检查生成的战斗报告,并确保它满足以下要求:

    • 报告易于阅读和理解。
    • 每个基地的战斗信息按 value 字段降序排序。
    • 当没有死亡时,“阵亡英雄”部分正确显示“无”,当有死亡时,列出阵亡英雄的ID。
    • 报告的整体格式一致且视觉上吸引人。
  2. 如果你发现任何问题或需要改进的地方,请相应地更新 auto_generate_report 函数并重新测试报告。

一旦你对生成的战斗报告感到满意,你就成功完成了这个项目!

✨ 查看解决方案并练习

总结

恭喜你!你已经完成了这个项目。你可以在LabEx中练习更多实验来提升你的技能。