전투 보고서 생성

PythonBeginner
지금 연습하기

소개

이 프로젝트에서는 제공된 데이터 파일을 기반으로 전투 보고서를 생성하는 방법을 배우게 됩니다. 전투 보고서는 세 개의 서로 다른 적 기지에서 발생한 전투의 주요 정보를 요약하며, 전투 ID, 가치, 총 참가자 수, 부상자, 사망자, 그리고 쓰러진 영웅들을 포함합니다.

👀 미리보기

Battle Report

🎯 과제

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

  • 전투 정보를 담고 있는 데이터 파일을 읽고 이해하는 방법
  • auto_generate_report 함수를 구현하여 전투 보고서를 생성하는 방법
  • 추가적인 서식 및 정보를 사용하여 전투 보고서를 개선하는 방법
  • 요구 사항을 충족하는지 확인하기 위해 전투 보고서를 테스트하고 개선하는 방법

🏆 성과

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

  • CSV 파일에서 데이터를 효율적으로 읽고 처리할 수 있습니다.
  • 구조화되고 유익한 보고서를 생성하는 함수를 구현할 수 있습니다.
  • 단계별 지침을 따르고 코딩 프로젝트를 완료하는 능력을 보여줄 수 있습니다.
  • 데이터 조작, 서식 지정 및 보고 기술을 향상시킬 수 있습니다.

데이터 파일 읽고 이해하기

이 단계에서는 프로젝트에 제공된 데이터 파일을 읽고 이해하는 방법을 배우게 됩니다.

세 기지의 데이터 파일은 A.csv, B.csv, 그리고 C.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 = "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
  2. 생성된 전투 보고서를 주의 깊게 검토하고 다음 요구 사항을 충족하는지 확인합니다:

    • 보고서를 읽고 이해하기 쉽습니다.
    • 각 기지의 전투 정보는 value 필드를 기준으로 내림차순으로 정렬됩니다.
    • 사망자가 없는 경우 "Heroes fallen" 섹션에 "None"이 올바르게 표시되고, 사망자가 있는 경우 사망한 영웅의 ID 가 나열됩니다.
    • 보고서의 전체적인 형식이 일관되고 시각적으로 보기 좋습니다.
  3. 개선해야 할 문제나 영역을 식별한 경우, 그에 따라 auto_generate_report 함수를 업데이트하고 보고서를 다시 테스트합니다.

생성된 전투 보고서에 만족하면 프로젝트를 성공적으로 완료한 것입니다!

✨ 솔루션 확인 및 연습

요약

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