news 2026/6/15 13:45:13

宠物临时寄养双向匹配系统,核心功能,寄养人发布空间与收费,宠物主人发需求,系统匹配靠谱寄养人,支持实时监控与押金担保,应用场景,解决宠物主人出差,旅游无人照顾的痛点。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
宠物临时寄养双向匹配系统,核心功能,寄养人发布空间与收费,宠物主人发需求,系统匹配靠谱寄养人,支持实时监控与押金担保,应用场景,解决宠物主人出差,旅游无人照顾的痛点。

以下是一个基于Python的宠物临时寄养双向匹配系统,采用模块化设计,包含核心匹配算法、押金担保和监控功能。系统遵循PEP8规范,添加详细注释,支持新手友好操作。

"""

宠物临时寄养双向匹配系统

核心功能:寄养人发布空间与收费、宠物主人发需求、智能匹配、实时监控、押金担保

技术栈:Python 3.8+(无第三方依赖,纯标准库实现)

"""

import json

from datetime import datetime, timedelta

from typing import List, Dict, Optional, Tuple

# ------------------------------

# 数据模型定义(实体类)

# ------------------------------

class User:

"""用户基类"""

def __init__(self, user_id: str, name: str, phone: str, location: str):

self.user_id = user_id # 唯一标识

self.name = name

self.phone = phone

self.location = location # 城市/区域

self.rating = 5.0 # 初始评分(5星制)

self.reviews = [] # 评价记录

class Sitter(User):

"""寄养人:提供寄养服务"""

def __init__(self, user_id: str, name: str, phone: str, location: str,

space_desc: str, price: float, max_pets: int, accepted_types: List[str]):

super().__init__(user_id, name, phone, location)

self.space_desc = space_desc # 空间描述(如"独立阳台+空调房")

self.price = price # 每日收费(元)

self.max_pets = max_pets # 最大寄养数量

self.accepted_types = accepted_types # 接受的宠物类型(如["猫", "小型犬"])

self.available_dates = [] # 可寄养日期范围((start, end)元组列表)

class PetOwner(User):

"""宠物主人:发布寄养需求"""

def __init__(self, user_id: str, name: str, phone: str, location: str,

pet_type: str, pet_size: str, special_needs: str = ""):

super().__init__(user_id, name, phone, location)

self.pet_type = pet_type # 宠物类型(如"布偶猫")

self.pet_size = pet_size # 体型(小型/中型/大型)

self.special_needs = special_needs # 特殊需求(如"需喂药")

class Listing:

"""寄养信息发布"""

def __init__(self, sitter: Sitter, start_date: str, end_date: str):

self.listing_id = f"L{datetime.now().strftime('%Y%m%d%H%M%S')}"

self.sitter = sitter

self.start_date = start_date # 格式"YYYY-MM-DD"

self.end_date = end_date

self.posted_time = datetime.now()

class Request:

"""寄养需求发布"""

def __init__(self, owner: PetOwner, pet_name: str, start_date: str,

end_date: str, budget: float, description: str = ""):

self.request_id = f"R{datetime.now().strftime('%Y%m%d%H%M%S')}"

self.owner = owner

self.pet_name = pet_name

self.start_date = start_date

self.end_date = end_date

self.budget = budget # 最高预算(元/天)

self.description = description # 额外说明

self.posted_time = datetime.now()

class Match:

"""匹配记录"""

def __init__(self, listing: Listing, request: Request, deposit: float):

self.match_id = f"M{datetime.now().strftime('%Y%m%d%H%M%S')}"

self.listing = listing

self.request = request

self.deposit = deposit # 押金(元)

self.status = "pending" # pending/confirmed/completed/cancelled

self.monitor_logs = [] # 监控日志(时间, 内容)

# ------------------------------

# 核心系统逻辑

# ------------------------------

class PetSittingSystem:

def __init__(self):

self.sitters: List[Sitter] = [] # 寄养人列表

self.owners: List[PetOwner] = [] # 宠物主人列表

self.listings: List[Listing] = [] # 寄养信息发布

self.requests: List[Request] = [] # 寄养需求发布

self.matches: List[Match] = [] # 匹配记录

self.deposit_pool = {} # 押金池 {match_id: amount}

def register_sitter(self, name: str, phone: str, location: str,

space_desc: str, price: float, max_pets: int,

accepted_types: List[str]) -> Sitter:

"""注册寄养人"""

sitter_id = f"S{len(self.sitters)+1}"

sitter = Sitter(sitter_id, name, phone, location, space_desc,

price, max_pets, accepted_types)

self.sitters.append(sitter)

return sitter

def register_owner(self, name: str, phone: str, location: str,

pet_type: str, pet_size: str, special_needs: str = "") -> PetOwner:

"""注册宠物主人"""

owner_id = f"O{len(self.owners)+1}"

owner = PetOwner(owner_id, name, phone, location, pet_type,

pet_size, special_needs)

self.owners.append(owner)

return owner

def post_listing(self, sitter: Sitter, start_date: str, end_date: str) -> Listing:

"""寄养人发布寄养信息"""

# 校验日期格式

try:

datetime.strptime(start_date, "%Y-%m-%d")

datetime.strptime(end_date, "%Y-%m-%d")

except ValueError:

raise ValueError("日期格式错误,请使用YYYY-MM-DD")

listing = Listing(sitter, start_date, end_date)

self.listings.append(listing)

return listing

def post_request(self, owner: PetOwner, pet_name: str, start_date: str,

end_date: str, budget: float, description: str = "") -> Request:

"""宠物主人发布寄养需求"""

try:

datetime.strptime(start_date, "%Y-%m-%d")

datetime.strptime(end_date, "%Y-%m-%d")

except ValueError:

raise ValueError("日期格式错误,请使用YYYY-MM-DD")

request = Request(owner, pet_name, start_date, end_date, budget, description)

self.requests.append(request)

return request

def _date_overlap(self, s1: str, e1: str, s2: str, e2: str) -> bool:

"""检查两个日期区间是否重叠"""

s1_dt, e1_dt = datetime.strptime(s1, "%Y-%m-%d"), datetime.strptime(e1, "%Y-%m-%d")

s2_dt, e2_dt = datetime.strptime(s2, "%Y-%m-%d"), datetime.strptime(e2, "%Y-%m-%d")

return s1_dt <= e2_dt and s2_dt <= e1_dt

def match_sitter(self, request: Request) -> List[Tuple[Listing, float]]:

"""核心匹配算法:返回按匹配度排序的寄养信息列表"""

matched = []

for listing in self.listings:

sitter = listing.sitter

# 基本条件过滤

if not (self._date_overlap(listing.start_date, listing.end_date,

request.start_date, request.end_date) and

sitter.location == request.owner.location and

request.pet_type.split()[0] in sitter.accepted_types and # 匹配宠物大类

listing.sitter.price <= request.budget and

sitter.max_pets > 0): # 简化:假设寄养人有空位

continue

# 计算匹配度(综合评分、价格、距离等因素)

price_score = 1 - (listing.sitter.price / request.budget) # 价格越低分越高

rating_score = sitter.rating / 5.0 # 评分越高分越高

match_score = 0.6 * rating_score + 0.4 * price_score # 权重分配

matched.append((listing, round(match_score, 2)))

# 按匹配度降序排序

return sorted(matched, key=lambda x: x[1], reverse=True)

def create_match(self, listing: Listing, request: Request, deposit: float) -> Match:

"""创建匹配记录(含押金担保)"""

if deposit < listing.sitter.price * 2: # 押金至少为2天费用

raise ValueError("押金不足,需至少为2天寄养费用")

match = Match(listing, request, deposit)

self.matches.append(match)

self.deposit_pool[match.match_id] = deposit # 存入押金池

listing.sitter.max_pets -= 1 # 占用寄养名额

return match

def add_monitor_log(self, match: Match, content: str):

"""添加实时监控日志(如宠物状态更新)"""

log_entry = (datetime.now().strftime("%Y-%m-%d %H:%M"), content)

match.monitor_logs.append(log_entry)

def complete_match(self, match: Match, is_successful: bool):

"""完成寄养,处理押金"""

if is_successful:

# 成功:退还押金给寄养人(简化处理,实际应转账)

print(f"押金{self.deposit_pool[match.match_id]}元已退还给寄养人{match.listing.sitter.name}")

else:

# 失败:扣除押金(示例逻辑)

penalty = self.deposit_pool[match.match_id] * 0.3 # 扣30%作为违约金

print(f"因寄养问题,扣除押金{penalty}元,剩余{self.deposit_pool[match.match_id]-penalty}元退还")

del self.deposit_pool[match.match_id]

match.listing.sitter.max_pets += 1 # 释放名额

match.status = "completed"

# ------------------------------

# 示例使用与测试

# ------------------------------

def demo():

"""系统功能演示"""

system = PetSittingSystem()

# 1. 注册用户

sitter1 = system.register_sitter(

name="李阿姨", phone="13800138000", location="北京市朝阳区",

space_desc="独立阳光房,带猫爬架和玩具", price=80, max_pets=2,

accepted_types=["猫", "小型犬"]

)

owner1 = system.register_owner(

name="张先生", phone="13900139000", location="北京市朝阳区",

pet_type="布偶猫", pet_size="小型", special_needs="需每日梳毛"

)

# 2. 发布寄养信息&需求

listing1 = system.post_listing(

sitter=sitter1, start_date="2024-08-01", end_date="2024-08-07"

)

request1 = system.post_request(

owner=owner1, pet_name="雪球", start_date="2024-08-01", end_date="2024-08-07",

budget=100, description="猫咪性格温顺,已绝育"

)

# 3. 智能匹配

matches = system.match_sitter(request1)

if not matches:

print("未找到匹配的寄养人")

return

best_listing, score = matches[0]

print(f"\n找到最佳匹配:{best_listing.sitter.name},匹配度{score*100}%")

print(f"收费:{best_listing.sitter.price}元/天,空间:{best_listing.sitter.space_desc}")

# 4. 创建匹配(押金200元)

try:

match1 = system.create_match(best_listing, request1, deposit=200)

print(f"\n匹配成功!匹配ID:{match1.match_id},押金已托管")

except ValueError as e:

print(f"匹配失败:{e}")

return

# 5. 实时监控(寄养期间更新)

system.add_monitor_log(match1, "雪球已适应新环境,进食正常")

system.add_monitor_log(match1, "今日梳毛完成,状态良好")

print("\n监控日志:")

for log in match1.monitor_logs:

print(f"{log[0]}:{log[1]}")

# 6. 完成寄养(模拟成功)

system.complete_match(match1, is_successful=True)

print(f"\n寄养完成,最终状态:{match1.status}")

if __name__ == "__main__":

demo()

系统核心功能说明

1. 双向匹配机制

- 寄养人侧:发布空间描述、收费标准、可寄养日期、接受宠物类型

- 需求侧:提交宠物信息(类型/体型)、寄养时间、预算、特殊需求

- 匹配算法:综合考量时间重叠、地理位置、价格预算、宠物兼容性、寄养人评分,按匹配度排序(示例权重:评分60%+价格40%)

2. 押金担保体系

- 押金规则:至少预付2天费用(防违约)

- 资金托管:系统暂存押金至

"deposit_pool"

- 结算逻辑:寄养成功后全额退还,失败时按比例扣除违约金(示例扣30%)

3. 实时监控功能

- 寄养人可添加图文日志(时间+内容)

- 宠物主人随时查看寄养状态(示例中通过

"add_monitor_log"实现)

4. 扩展能力

- 用户评价:通过

"reviews"列表记录,影响后续匹配评分

- 多宠物支持:

"max_pets"控制寄养容量,

"special_needs"满足个性化需求

- 数据持久化:可添加JSON/SQLite存储(示例中预留

"json"导入)

使用指南

1. 环境准备:Python 3.8+,无需额外安装库

2. 操作流程:

- 注册寄养人/宠物主人

- 发布寄养信息(寄养人)或需求(宠物主人)

- 系统自动匹配并返回推荐列表

- 确认匹配后支付押金,开始寄养

- 寄养期间更新监控日志

- 结束后结算押金,完成评价

技术优势

- 轻量化设计:纯标准库实现,无外部依赖,适合新手部署

- 模块化架构:实体类与业务逻辑分离,便于扩展(如添加支付接口)

- 鲁棒性处理:日期校验、参数合法性检查、异常捕获(如押金不足提示)

- 透明化匹配:返回匹配度分数,帮助用户理解推荐理由

该系统可有效解决宠物主人短期出行时的寄养难题,通过标准化流程和信用保障机制提升双方信任度。如需扩展Web界面,可基于Flask/Django框架对接本核心逻辑。

欢迎关注我,有更多编程干货等着你!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 12:50:38

第5篇 | EPON vs. GPON:那场发生在“标准”里的隐形战争

《固定接入网:光纤的“最后一公里”》 第5篇 01. 引子:为什么同样是光纤,你的“猫”却不能去邻居家串门? 如果你在搬家时试过把旧房子的光猫带到新家用,或者在闲鱼上买过二手光猫,你很可能遭遇过这样的“滑铁卢”: 明明接口长得一模一样,明明都是光纤入户,甚至明明都…

作者头像 李华
网站建设 2026/6/15 14:48:01

2、搭建Kali Linux测试环境全攻略

搭建Kali Linux测试环境全攻略 在进行Web应用程序安全测试之前,我们需要确保拥有最新的工具和合适的测试环境。以下将详细介绍如何更新Kali Linux、安装相关工具、创建虚拟机以及了解易受攻击的Web应用程序。 1. 更新和升级Kali Linux 在开始测试Web应用程序的安全性之前,…

作者头像 李华
网站建设 2026/6/15 13:51:52

3、渗透测试侦察阶段技术指南

渗透测试侦察阶段技术指南 1. 渗透测试流程概述 在进行网络或Web应用程序渗透测试时,有一套既定的工作流程。这个流程通常包含以下几个阶段,完成这些阶段有助于提高发现并利用目标系统中所有可能存在的漏洞的几率: - 侦察(Reconnaissance) - 枚举(Enumeration) - 利…

作者头像 李华
网站建设 2026/6/15 16:27:34

集合已修改;可能无法执行枚举操作

代码中反复出现的 “集合已修改&#xff1b;可能无法执行枚举操作”&#xff08;InvalidOperationException: Collection was modified; enumeration operation may not execute.&#xff09;异常&#xff0c;主要源于在遍历 XValues 或 YValues 的同时&#xff08;直接或间接地…

作者头像 李华
网站建设 2026/6/15 12:52:59

7、Web应用程序漏洞检测与自动化扫描指南

Web应用程序漏洞检测与自动化扫描指南 在Web应用程序的安全检测中,文件包含漏洞检测和自动化扫描是非常重要的环节,下面将详细介绍相关的检测方法和工具使用。 文件包含漏洞检测 文件包含漏洞是指开发者使用可被用户修改的请求参数来动态选择要加载的页面或包含在服务器执行…

作者头像 李华
网站建设 2026/6/15 14:18:39

10、持续集成与基础设施即代码实践指南

持续集成与基础设施即代码实践指南 1. 执行管道 在完成设置后,我们先查看一下分叉仓库中的 .drone.yaml 文件: debug: true pipeline:build:image: nodecommands:- npm install --development- npm test这就是我们的管道,它会和代码一起提交到仓库中。当 GitHub 将 We…

作者头像 李华