48 — 상점 — 재고 관리
33은 목록을 저장했고, 31은
기록을 저장했습니다. 상점은 그 생각을 한 단계 키운 것입니다: 각 상품이
price와 stock을 가진 상품들의 딕셔너리, 그리고 money 잔액. 전부
shop.json에 담깁니다.
단계
상점은 두 부분으로 된 JSON 객체 하나입니다: 이름을
{"price": N, "stock": N}에 연결하는items딕셔너리, 그리고money잔액:
실행해 보기 →{ "items": { "apple": {"price": 3, "stock": 10}, "banana": {"price": 5, "stock": 5}, "cherry": {"price": 2, "stock": 0} }, "money": 20 }상점 전체입니다.
shop.json옆에shop.ko.nme을 저장합니다.파일 사용 최신이json읽기/json저장을 불러오고,os.path.exists가 첫 실행에 새 상점을 만듭니다:
실행해 보기 →# shop.ko.nme — JSON 파일에 보관하는 작은 상점. # 실행: nme 실행 shop.ko # list, buy, sell, quit 중 하나를 입력하세요. 파일 사용 최신 import os if os.path.exists("shop.json"): 데이터 = json읽기("shop.json") else: 데이터 = {"items": {}, "money": 20} while True: 말해 f"돈: {데이터['money']}" 말해 "명령: list, buy, sell, quit" 물어봐 명령, "? " if 명령 == "list": for 이름 in 데이터["items"]: 상품 = 데이터["items"][이름] 말해 f"{이름}: {상품['price']}원, 재고 {상품['stock']}개" elif 명령 == "buy" or 명령 == "sell": 물어봐 이름, "상품? " if 이름 in 데이터["items"]: 상품 = 데이터["items"][이름] if 명령 == "buy": if 상품["stock"] > 0: 상품["stock"] = 상품["stock"] - 1 데이터["money"] = 데이터["money"] - 상품["price"] 말해 f"{이름} 구매" json저장("shop.json", 데이터) else: 말해 "재고 없음" else: 상품["stock"] = 상품["stock"] + 1 데이터["money"] = 데이터["money"] + 상품["price"] 말해 f"{이름} 판매" json저장("shop.json", 데이터) else: 말해 "그런 상품 없음" elif 명령 == "quit": 말해 "안녕!" break else: 말해 "알 수 없는 명령"list는for 이름 in 데이터["items"]:으로 딕셔너리를 지나갑니다.buy와sell은or(09)로 한 갈래를 공유합니다. buy는 가격을 내고 재고를 줄이며, sell은 돌려주고 더하며,json저장이 다시 씁니다 — 상점이 실행 사이에도 남습니다.파이프로 명령을 넣어 실행합니다.
buy apple은 3원을 내고 재고를 9로 줄이며,sell apple은 돌려 줍니다:printf 'list\nbuy\napple\nsell\napple\nquit\n' | nme 실행 shop.ko돈: 20 명령: list, buy, sell, quit ? apple: 3원, 재고 10개 banana: 5원, 재고 5개 cherry: 2원, 재고 0개 돈: 20 명령: list, buy, sell, quit ? 상품? apple 구매 돈: 17 명령: list, buy, sell, quit ? 상품? apple 판매 돈: 20 명령: list, buy, sell, quit ? 안녕!
직접 해보기
상품 재고에 수를 더하는 restock <name> <count> 명령을 추가해 보세요.
또는 새 상품을 넣고 저장하는 add <name> <price> 명령을 추가해 보세요.
배운 것
- 상점은 상품 딕셔너리들의 딕셔너리에 돈 잔액을 더한 것이고, 전부 JSON으로 저장됩니다.
for 이름 in 데이터["items"]:이 키를 나열하고 그 상품을 읽습니다.buy/sell이 잔액과 재고를 바꾸고json저장이 보관합니다.quit명령과break가while True:메뉴를 끝냅니다.