71 — 차트: 터미널 막대 그래프
63은 문자열을 곱해 줄을 만들었고,
66은 점수로 기록을 정렬했습니다. 막대 그래프는 둘을
합칩니다 — JSON에서 값을 읽고, 각 값을 가장 큰 값에 맞춘 # 블록 줄로
바꿉니다. 숫자가 한눈에 읽히는 그림이 됩니다.
단계
chart.json을 만듭니다 —label과value가 든 기록들의 목록:
실행해 보기 →[ {"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가 막대 길이가 됩니다.14의
json읽기로 목록을 불러옵니다. 값들을 자기 목록으로 모으면max를 부르기 쉽습니다:
실행해 보기 →파일 사용 최신 행들 = json읽기("chart.json") 값들 = [] for 행 in 행들: 값들.append(행["value"]) 말해 max(값들)41이 출력됩니다 — 가장 큰 값, 곧 눈금의 기준입니다.막대는 가장 긴 막대의 일부분입니다.
최대값이 가장 큰 값이고,int(값 / 최대값 * 20)은 그 값이 차지하는 20칸 중 몇 칸인지입니다:
실행해 보기 →값 = 29 최대값 = 41 길이 = int(값 / 최대값 * 20) 말해 길이14가 출력됩니다. 29는 41의 20분의 14쯤 되기 때문입니다."#" * 길이가 막대 자체를 만듭니다 — 63의 문자열 곱셈입니다:
실행해 보기 →길이 = 14 말해 "#" * 길이#열네 개가 출력됩니다. 문자열을 반복하는 것이 숫자를 그림으로 만드는 방법입니다.전체 프로그램은 데이터를 불러와 눈금을 찾고, 기록마다 이름 붙은 막대 하나씩을 그립니다.
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}은 모든 이름을 세 칸으로 정렬해 막대가 같은 자리에서 시작하게 합니다.길이와막대는 매 줄 다시 계산됩니다.데이터 파일이 있는 상태에서 실행합니다:
nme 실행 chart.ko가장 큰 값: 41 Jan: ##### 12 Feb: ############## 29 Mar: ######## 18 Apr: #################### 41 May: ########### 24 Jun: ################# 35가장 큰 값인 4월이 20칸을 모두 채우고, 가장 작은 값인 1월이 5칸을 채웁니다. 모든 막대가 같은 눈금의 일부분이므로 그래프는 정직합니다.
영어는 같은 단계를
use file latest,json_load,show,bar로 씁니다. 전체 영어 프로그램은 영어 가이드에 있습니다.
직접 해보기
chart.json에 {"label": "Jul", "value": 47}을 추가하고 다시 실행해 보세요
— 눈금이 47로 옮겨지고 다른 막대가 모두 줄어듭니다. 그런 다음 길이 공식의
20을 40으로 바꿔 더 넓은 그래프를 만들거나, 줄마다 "@" 막대를 하나 더
추가해 보세요.
배운 것
- 기록의
value가 막대 길이가 되고,max(값들)이 눈금을 정합니다. int(값 / 최대값 * 20)이 값을 블록 개수로 바꿉니다."#" * 길이가 문자 하나를 막대로 반복합니다.{이름:>3}이 이름을 정렬해 모든 막대가 같은 칸에서 시작하게 합니다.