1. 实际应用场景描述
场景
小王是一名热爱旅行的上班族,计划五一假期去云南大理旅行。
但他面临以下问题:
- 一个人旅行孤单,想找志同道合的旅伴分摊费用和分享乐趣
- 不熟悉当地景点和美食,担心错过精华
- 行程安排不合理,浪费时间和金钱
- 无法实时共享计划和变更信息
痛点
- 找不到合适旅伴 → 兴趣、时间不匹配
- 信息不对称 → 不了解当地玩法
- 行程效率低 → 路线规划不合理
- 费用分摊麻烦 → 容易产生纠纷
2. 核心逻辑讲解
1. 用户注册与偏好设置(目的地、时间、兴趣爱好)
2. 旅伴匹配算法:基于目的地、时间重叠度、兴趣相似度匹配
3. 行程共享:多人协作编辑旅行计划
4. 费用分摊:自动计算每人应付金额
5. 景点美食推荐:根据目的地和城市标签推荐
6. 数据持久化:用 JSON 存储用户和行程数据
3. 模块化代码结构
travel_companion/
│
├── main.py # 主程序入口
├── users.py # 用户管理
├── matching.py # 旅伴匹配
├── itinerary.py # 行程管理
├── expenses.py # 费用分摊
├── recommendations.py # 景点美食推荐
├── utils.py # 工具函数
└── README.md # 项目说明
4. 核心代码实现
"users.py"
import json
import os
FILE = "users.json"
def load_users():
if os.path.exists(FILE):
with open(FILE, "r", encoding="utf-8") as f:
return json.load(f)
return []
def save_users(data):
with open(FILE, "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=4)
def register_user(name, destination, travel_date, interests):
users = load_users()
users.append({
"name": name,
"destination": destination,
"travel_date": travel_date,
"interests": interests
})
save_users(users)
"matching.py"
from users import load_users
def match_companions(current_user):
all_users = load_users()
matches = []
for user in all_users:
if user["name"] == current_user["name"]:
continue
# 简单匹配逻辑:目的地相同 + 时间重叠 + 兴趣交集
if (user["destination"] == current_user["destination"] and
user["travel_date"] == current_user["travel_date"] and
set(user["interests"]) & set(current_user["interests"])):
matches.append(user["name"])
return matches
"itinerary.py"
ITINERARY_DB = {}
def create_itinerary(trip_id, plan):
ITINERARY_DB[trip_id] = plan
def get_itinerary(trip_id):
return ITINERARY_DB.get(trip_id, "未找到行程")
"expenses.py"
def split_expenses(total_cost, num_people):
return round(total_cost / num_people, 2)
def calculate_share(expenses_list, person):
return sum(item["amount"] for item in expenses_list if item["payer"] != person) / len([item for item in expenses_list if item["payer"] != person])
"recommendations.py"
RECOMMENDATIONS = {
"大理": {
"景点": ["洱海", "苍山", "古城"],
"美食": ["烤乳扇", "饵丝", "酸辣鱼"]
},
"成都": {
"景点": ["宽窄巷子", "大熊猫基地", "锦里"],
"美食": ["火锅", "串串香", "兔头"]
}
}
def recommend_place(city):
info = RECOMMENDATIONS.get(city, {})
return info.get("景点", []), info.get("美食", [])
"main.py"
from users import register_user
from matching import match_companions
from recommendations import recommend_place
def main():
print("=== 旅行结伴助手 ===")
name = input("你的名字:")
destination = input("旅行目的地:")
travel_date = input("旅行日期(YYYY-MM-DD):")
interests = input("兴趣爱好(逗号分隔):").split(",")
user = {
"name": name,
"destination": destination,
"travel_date": travel_date,
"interests": [i.strip() for i in interests]
}
register_user(name, destination, travel_date, user["interests"])
print("\n正在匹配旅伴...")
companions = match_companions(user)
if companions:
print("找到以下旅伴:", ", ".join(companions))
else:
print("暂未找到匹配的旅伴")
spots, foods = recommend_place(destination)
print(f"\n{destination}推荐景点:", ", ".join(spots))
print(f"{destination}推荐美食:", ", ".join(foods))
if __name__ == "__main__":
main()
5. README.md
# 旅行结伴助手 APP
一个帮助用户寻找旅伴、共享行程、分摊费用并推荐景点的Python工具。
## 功能
- 注册旅行偏好
- 智能匹配旅伴
- 共享行程计划
- 自动分摊费用
- 推荐景点和美食
## 使用方法
1. 安装 Python 3.x
2. 运行 `python main.py`
3. 按提示输入信息
## 文件结构
- `main.py` 主程序
- `users.py` 用户管理
- `matching.py` 旅伴匹配
- `itinerary.py` 行程管理
- `expenses.py` 费用分摊
- `recommendations.py` 推荐系统
6. 核心知识点卡片
知识点 说明
列表与字典 存储用户和推荐数据
集合运算 计算兴趣交集
模块化设计 分文件管理功能
数据持久化 JSON存储用户信息
字符串处理 解析用户输入
7. 总结
这个 旅行结伴助手 APP 解决了独自旅行时的孤独感、信息不对称、行程效率低、费用分摊麻烦等问题,并且通过模块化设计让代码易于扩展。
如果你愿意,可以在下一步:
- 增加 图形界面(Tkinter/PyQt)
- 接入 地图API(高德/百度地图搜索附近景点)
- 实现 实时聊天功能(WebSocket/socket.io)
利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!