본문 바로가기
수업자료

인프라 기반 기술 활용 - 파이썬 실기평가

by ^..^v 2021. 1. 17.
728x90
반응형

문제

아래 파일은 작년 10월부터 12월까지 시도별 코로나19 확진자 수를 기록한 CSV 파일입니다.

covid19.csv
0.00MB

해당 파일을 읽어 아래와 같은 형식의 출력을 만드는 파이썬 프로그램을 제작하시오.

(CSV 파일은 다운로드해서 로컬에 저장 후 작업)

 

평가기준

1. CSV 파일을 읽고 원하는 데이터를 추출 가공할 수 있다.

2. 문자열과 숫자를 형변환할 수 있다.

3. 리스트형 자료를 처리할 수 있다.

4. 정규식을 이용하여 불필요한 문자를 검색, 제거할 수 있다.

5. 포맷 문자열을 이용하여 형식에 맞춰서 출력할 수 있다.

 

답안예시

import csv, re

def s2i(s: str) -> int:
    try:
        return int(re.sub(',', '', s))
    except:
        return 0

def print_label() -> None:
    print('{0}\t{1:>9}{2:>9}{3:>9}{4:>9}'.format('시도', '계', '12월', '11월', '10월'))

def print_data(l: list, sum: int) -> None:
    print('{0}\t{1:>10,}{2:>10,}{3:>10,}{4:>10,}'.format(l[1], sum, s2i(l[4]), s2i(l[3]), s2i(l[2])))
    
def get_sum(l:list) -> int:
    return s2i(l[2]) + s2i(l[3]) + s2i(l[4])

def print_summary(area: list, total: list) -> None:
    value = max(total)
    label = area[total.index(value)]
    print("{0}에서 {1:,}명으로 확진자가 가장 많이 발생했으며,".format(label, value))

    value = min(total)
    label = area[total.index(value)]
    print("{0}에서 {1:,}명으로 확진자가 가장 적게 발생했습니다.".format(label, value))

def print_covid19_data() -> None:
    area = []
    total = []
    with open("./covid19.csv", "r") as csv_file:
        lines = csv.reader(csv_file)
        for line in lines:
            if line[0] != '시도별':
                print_label()
            else:
                sum = get_sum(line)
                print_data(line, sum)
                
                area.append(line[1])
                total.append(sum)

    print_summary(area, total)

if __name__ == "__main__":
    print_covid19_data()

 

728x90
반응형

댓글