1. 实际应用场景与痛点
场景
无论是短途出差还是长途旅行,人们常遇到:
- 出发前纠结要带什么,临时想起漏带重要物品
- 不同气候目的地需要不同衣物和用品,难以快速决策
- 多人出行时行李重复或遗漏
- 打包过程没有记录,容易重复检查或忘记
痛点
1. 漏带物品:尤其证件、充电器等重要物品。
2. 过度打包:带了很多用不到的东西,增加负担。
3. 气候差异:去寒冷地区忘带厚衣服,去热带地区带太多。
4. 无记录:打包后不知道哪些已装,哪些未装。
2. 核心逻辑讲解
1. 输入出行信息
- 出行天数(决定衣物数量)
- 目的地气候(冷/温/热)
2. 生成基础清单
- 证件类(身份证、护照等)——必带
- 衣物类(根据天数和气候计算)
- 洗漱用品、电子设备、药品等
3. 标注必带物品
- 用特殊标记(如 ★)提示重要性
4. 勾选打包功能
- 用户可标记已打包物品,实时查看进度
5. 数据持久化
- 使用 JSON 存储清单和打包状态
6. 模块化设计
- 分离数据、生成逻辑、交互界面
3. 项目结构
packing_list_tool/
├── main.py # 主程序入口
├── generator.py # 清单生成逻辑
├── tracker.py # 打包状态管理
├── data/
│ ├── base_items.json # 基础物品库
│ └── packing_status.json # 打包状态
├── README.md
└── USAGE.md
4. 核心代码
"generator.py"
import json
BASE_ITEMS_FILE = "data/base_items.json"
class PackingGenerator:
def __init__(self):
with open(BASE_ITEMS_FILE, "r", encoding="utf-8") as f:
self.base_items = json.load(f)
def generate(self, days, climate):
# 根据天数和气候生成衣物数量
clothes = self.base_items["clothes"]
if climate == "cold":
clothes["外套"] = 1
clothes["毛衣"] = 2
clothes["长裤"] = days
elif climate == "hot":
clothes["短袖"] = days
clothes["短裤"] = days - 1
clothes["凉鞋"] = 1
else: # warm
clothes["长袖"] = days
clothes["长裤"] = days
clothes["外套"] = 1
# 合并所有物品
result = {}
result.update(self.base_items["documents"]) # 证件类
result.update(clothes) # 衣物类
result.update(self.base_items["toiletries"]) # 洗漱
result.update(self.base_items["electronics"]) # 电子
result.update(self.base_items["medicine"]) # 药品
return result
"tracker.py"
import json
import os
STATUS_FILE = "data/packing_status.json"
class PackingTracker:
def __init__(self):
os.makedirs("data", exist_ok=True)
try:
with open(STATUS_FILE, "r", encoding="utf-8") as f:
self.status = json.load(f)
except FileNotFoundError:
self.status = {}
def update_status(self, item, packed):
self.status[item] = packed
self.save()
def save(self):
with open(STATUS_FILE, "w", encoding="utf-8") as f:
json.dump(self.status, f, ensure_ascii=False, indent=4)
def get_status(self):
return self.status
"main.py"
from generator import PackingGenerator
from tracker import PackingTracker
def print_list(items, status):
print("\n=== 行李打包清单 ===")
for category, things in items.items():
print(f"\n【{category}】")
for item, qty in things.items():
key = f"{category}-{item}"
checked = "✅" if status.get(key, False) else "⬜"
star = "★" if category in ["documents", "medicine"] else ""
print(f"{checked} {star}{item} x{qty}")
def main():
generator = PackingGenerator()
tracker = PackingTracker()
days = int(input("出行天数: "))
climate = input("目的地气候 (cold/warm/hot): ").strip().lower()
items = generator.generate(days, climate)
status = tracker.get_status()
while True:
print_list(items, status)
print("\n1. 标记已打包")
print("2. 重置打包状态")
print("0. 退出")
choice = input("选择: ").strip()
if choice == "1":
cat = input("类别: ")
it = input("物品名: ")
key = f"{cat}-{it}"
if key in status:
tracker.update_status(key, not status[key])
print("✅ 状态已更新")
else:
print("❌ 物品不存在")
elif choice == "2":
tracker.status = {}
tracker.save()
print("🔄 已重置打包状态")
elif choice == "0":
break
else:
print("无效选择")
if __name__ == "__main__":
main()
5.
"data/base_items.json" 示例
{
"documents": {
"身份证": 1,
"护照": 1,
"机票/车票": 1
},
"clothes": {},
"toiletries": {
"牙刷": 1,
"牙膏": 1,
"毛巾": 1
},
"electronics": {
"手机": 1,
"充电器": 1,
"充电宝": 1
},
"medicine": {
"常用药品": 1,
"创可贴": 5
}
}
6. README.md
# 🧳 行李打包清单生成工具
一个用 Python 编写的 CLI 工具,根据出行天数和目的地气候生成个性化行李清单,支持勾选打包,避免漏带物品。
## 功能
- 输入天数和气候,自动生成清单
- 标注必带物品(★)
- 勾选已打包物品
- 数据持久化(JSON)
## 安装
bash
git clone "https://github.com/yourname/packing_list_tool.git" (https://github.com/yourname/packing_list_tool.git)
cd packing_list_tool
## 运行
bash
python main.py
7. USAGE.md
# 使用说明
1. 运行 `python main.py`。
2. 输入出行天数和目的地气候。
3. 查看生成的清单,必带物品标有 ★。
4. 使用“标记已打包”更新状态。
5. 可随时重置打包状态重新勾选。
8. 核心知识点卡片
知识点 说明
JSON 数据持久化 存储物品库与打包状态
模块化设计 分离生成逻辑与状态管理
动态清单生成 根据天数和气候调整衣物数量
状态标记 实时跟踪打包进度
CLI 交互 简单易用
扩展性 可轻松添加新类别或规则
9. 总结
这个工具解决了漏带物品、过度打包、气候差异、无记录四大痛点,通过智能生成 + 必带标注 + 勾选跟踪,让用户出行前轻松完成打包,省心又高效。
它适合:
- 个人旅行
- 家庭出游
- 商务差旅
如果你需要,可以在下一步:
- 增加 图形界面(Kivy/PyQt)
- 增加 导出 PDF/打印清单
- 增加 多人共享清单功能
利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛