needmoreeasy EN 한국어
배우기

71 — 차트: 터미널 막대 그래프

★★★★★ (5/5)시각화/출력
선수 지식
63 — 아스키 아트, 66 — 상위 열
결과물
JSON 목록에서 가장 큰 값에 맞춘 # 블록으로 가로 막대 그래프를 그리는 프로그램

63은 문자열을 곱해 줄을 만들었고, 66은 점수로 기록을 정렬했습니다. 막대 그래프는 둘을 합칩니다 — JSON에서 값을 읽고, 각 값을 가장 큰 값에 맞춘 # 블록 줄로 바꿉니다. 숫자가 한눈에 읽히는 그림이 됩니다.

단계

  1. chart.json을 만듭니다 — labelvalue가 든 기록들의 목록:

    [
      {"label": "Jan", "value": 12},
      {"label": "Feb", "value": 29},
      {"label": "Mar", "value": 18},
      {"label": "Apr", "value": 41},
      {"label": "May", "value": 24},
      {"label": "Jun", "value": 35}
    ]
    
    실행해 보기 →

    label이 줄 이름이 되고, value가 막대 길이가 됩니다.

  2. 14json읽기로 목록을 불러옵니다. 값들을 자기 목록으로 모으면 max를 부르기 쉽습니다:

    파일 사용 최신
    행들 = json읽기("chart.json")
    값들 = []
    for 행 in 행들:
        값들.append(행["value"])
    말해 max(값들)
    
    실행해 보기 →

    41이 출력됩니다 — 가장 큰 값, 곧 눈금의 기준입니다.

  3. 막대는 가장 긴 막대의 일부분입니다. 최대값이 가장 큰 값이고, int(값 / 최대값 * 20)은 그 값이 차지하는 20칸 중 몇 칸인지입니다:

    값 = 29
    최대값 = 41
    길이 = int(값 / 최대값 * 20)
    말해 길이
    
    실행해 보기 →

    14가 출력됩니다. 29는 41의 20분의 14쯤 되기 때문입니다.

  4. "#" * 길이가 막대 자체를 만듭니다 — 63의 문자열 곱셈입니다:

    길이 = 14
    말해 "#" * 길이
    
    실행해 보기 →

    # 열네 개가 출력됩니다. 문자열을 반복하는 것이 숫자를 그림으로 만드는 방법입니다.

  5. 전체 프로그램은 데이터를 불러와 눈금을 찾고, 기록마다 이름 붙은 막대 하나씩을 그립니다. chart.ko.nme로 저장합니다:

    # chart.ko.nme — 터미널 막대 그래프.
    # 실행: nme 실행 chart.ko
    # chart.json이 같은 폴더에 있어야 합니다.
    # 각 막대는 가장 큰 값에 맞춘 # 블록입니다.
    
    파일 사용 최신
    
    행들 = json읽기("chart.json")
    
    값들 = []
    for 행 in 행들:
        값들.append(행["value"])
    
    최대값 = max(값들)
    말해 f"가장 큰 값: {최대값}"
    말해 ""
    
    for 행 in 행들:
        이름 = 행["label"]
        길이 = int(행["value"] / 최대값 * 20)
        막대 = "#" * 길이
        말해 f"{이름:>3}: {막대} {행['value']}"
    
    실행해 보기 →

    {이름:>3}은 모든 이름을 세 칸으로 정렬해 막대가 같은 자리에서 시작하게 합니다. 길이막대는 매 줄 다시 계산됩니다.

  6. 데이터 파일이 있는 상태에서 실행합니다:

    nme 실행 chart.ko
    
    가장 큰 값: 41
    
    Jan: ##### 12
    Feb: ############## 29
    Mar: ######## 18
    Apr: #################### 41
    May: ########### 24
    Jun: ################# 35
    

    가장 큰 값인 4월이 20칸을 모두 채우고, 가장 작은 값인 1월이 5칸을 채웁니다. 모든 막대가 같은 눈금의 일부분이므로 그래프는 정직합니다.

  7. 영어는 같은 단계를 use file latest, json_load, show, bar로 씁니다. 전체 영어 프로그램은 영어 가이드에 있습니다.

직접 해보기

chart.json{"label": "Jul", "value": 47}을 추가하고 다시 실행해 보세요 — 눈금이 47로 옮겨지고 다른 막대가 모두 줄어듭니다. 그런 다음 길이 공식의 20을 40으로 바꿔 더 넓은 그래프를 만들거나, 줄마다 "@" 막대를 하나 더 추가해 보세요.

배운 것

  • 기록의 value가 막대 길이가 되고, max(값들)이 눈금을 정합니다.
  • int(값 / 최대값 * 20)이 값을 블록 개수로 바꿉니다.
  • "#" * 길이가 문자 하나를 막대로 반복합니다.
  • {이름:>3}이 이름을 정렬해 모든 막대가 같은 칸에서 시작하게 합니다.

GitHub에서 이 문서 보기