43 — 프로젝트: 습관 체크
33 가이드는 딕셔너리 목록의 할 일을 저장했고, 23 가이드는 프로젝트를 여러 파일로 나눴습니다. 습관 추적기는 딕셔너리 하나 — 습관마다 연속 날수 — 를 JSON으로 저장합니다.
단계
저장은 모듈에 둡니다.
store_ko.nme이load()와save(습관들)을 내보냅니다. 습관은{이름: 날수}딕셔너리 항목이고, 파일이 없으면load()가{}를 돌려줍니다:
실행해 보기 →# store_ko.nme — 습관 추적기의 파일 저장 모듈 import os 파일 사용 최신 def load(): if os.path.exists("habits.json"): return json읽기("habits.json") return {} def save(습관들): json저장("habits.json", 습관들)프로젝트 전체입니다.
store_ko.nme옆에habit.ko.nme을 저장합니다:# habit.ko.nme — 실행 사이에도 남는 습관 추적기 # 실행: nme 실행 habit.ko from "store_ko.nme" import load, save 습관들 = load() while True: 말해 "" 말해 "명령: add, check, streak, list, quit" 물어봐 명령, "? " if 명령 == "add": 물어봐 이름, "습관? " 습관들[이름] = 0 save(습관들) 말해 f"{이름} 추가" elif 명령 == "check": 물어봐 이름, "습관? " if 이름 in 습관들: 습관들[이름] = 습관들[이름] + 1 save(습관들) 말해 f"{이름} 체크 ({습관들[이름]}일 연속)" else: 말해 f"{이름} 습관 없음" elif 명령 == "streak": 물어봐 이름, "습관? " 말해 f"{이름}: {습관들.get(이름, 0)}일 연속" elif 명령 == "list": 말해 f"습관 {len(습관들)}개" for 이름 in 습관들: 말해 f"{이름}: {습관들[이름]}" elif 명령 == "quit": 말해 "안녕!" breakadd는 습관을 0에서 시작하고,check는 1을 더해 저장하며,streak는 값을 읽고,list는 모든 짝을 방문합니다.파이프로 명령을 넣어 실행합니다:
printf 'add\n물 마시기\ncheck\n물 마시기\ncheck\n물 마시기\nstreak\n물 마시기\nlist\nquit\n' | nme 실행 habit.ko명령: add, check, streak, list, quit ? 습관? 물 마시기 추가 명령: add, check, streak, list, quit ? 습관? 물 마시기 체크 (1일 연속) 명령: add, check, streak, list, quit ? 습관? 물 마시기 체크 (2일 연속) 명령: add, check, streak, list, quit ? 습관? 물 마시기: 2일 연속 명령: add, check, streak, list, quit ? 습관 1개 물 마시기: 2 명령: add, check, streak, list, quit ? 안녕!습관이 0에서 2로 자랐습니다 —
habits.json에{"물 마시기": 2}가 저장됩니다. 영어는 같은 메뉴를ask와show로 씁니다 — 전체 쌍은 43-habit.md에 있습니다.
직접 해보기
습관을 0으로 되돌리는 reset 명령을 더해 보세요 — elif 한 갈래와 save 하나입니다.
배운 것
- 습관은
{이름: 날수}딕셔너리이고,습관들[이름] = 습관들[이름] + 1이 연속을 늘립니다. - 모듈 파일이
load()와save()를 담고 주 프로그램이 그것을 가져옵니다. json저장이 변경마다 딕셔너리 전체를 저장합니다.add/check/streak/list/quit메뉴의while True반복과break가 추적기 전체를 움직입니다.