Генерация отчета о боях

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом проекте вы научитесь генерировать отчет о боях на основе предоставленных файлов данных. Отчет о боях будет суммировать ключевую информацию о битвах, произошедших на трех различных базах противника, включая идентификатор боя, значение, общее количество участников, раненых, погибших и павших героев.

👀 Предварительный просмотр

Battle Report

🎯 Задачи

В этом проекте вы научитесь:

  • Читать и понимать файлы данных, содержащие информацию о боях
  • Реализовать функцию auto_generate_report для генерации отчета о боях
  • Улучшать отчет о боях дополнительным форматированием и информацией
  • Тестировать и усовершенствовать отчет о боях, чтобы убедиться, что он соответствует требованиям

🏆 Достижения

После завершения этого проекта вы сможете:

  • Эффективно читать и обрабатывать данные из CSV-файлов
  • Реализовать функцию для генерации структурированного и информативного отчета
  • Показать свою способность следовать пошаговым инструкциям и завершить проект по программированию
  • Улучшить свои навыки в манипуляции данными, форматировании и отчетности

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL 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(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) 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.csv, B.csv и C.csv. Каждая строка данных содержит следующую информацию:

  • id: Номер идентификатора боя.
  • value: Значение боевого объектива.
  • total: Общее количество участников с нашей стороны в бою.
  • injured: Общее количество раненых с нашей стороны в бою.
  • dead: Количество погибших с нашей стороны в бою.
  • hero: Номер идентификатора погибших в бою.

Реализовать функцию 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 = "Battle report as follows:\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"Battles occurred at Base {base_name}, sorted by value, are as follows:\n"
        )
        for row in data:
            report += f"Battle ID: {row['id']}, Value: {row['value']}, Total participants in this battle: {row['total']}, Injured: {row['injured']}, Dead: {row['dead']}."
            if row["dead"] == "0":
                report += " Heroes fallen: None.\n"
            else:
                report += f" Heroes fallen: {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
Battle Report
  1. тщательно проверьте сгенерированный отчет о боях и убедитесь, что он соответствует следующим требованиям:

    • Отчет легко читается и понятен.
    • Информация о боях для каждой базы отсортирована по убыванию по полю value.
    • Раздел "Павшие герои" правильно отображает "Нет" при отсутствии погибших и перечисляет идентификаторы павших героев при наличии погибших.
    • Общее форматирование отчета一致 и визуально привлекательно.
  2. Если вы обнаружили какие-либо проблемы или области для улучшения, обновите функцию auto_generate_report соответственно и снова протестируйте отчет.

Как только вы будете довольны сгенерированным отчетом о боях, вы успешно завершили проект!

✨ Проверить решение и практиковаться

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.