手机网站 做成app,网站遇到攻击时应该怎么做,网络营销推广专员的岗位职责,足球世界积分榜以下是一个基于Python的宠物临时寄养双向匹配系统#xff0c;采用模块化设计#xff0c;包含核心匹配算法、押金担保和监控功能。系统遵循PEP8规范#xff0c;添加详细注释#xff0c;支持新手友好操作。宠物临时寄养双向匹配系统核心功能#xff1a;寄…以下是一个基于Python的宠物临时寄养双向匹配系统采用模块化设计包含核心匹配算法、押金担保和监控功能。系统遵循PEP8规范添加详细注释支持新手友好操作。宠物临时寄养双向匹配系统核心功能寄养人发布空间与收费、宠物主人发需求、智能匹配、实时监控、押金担保技术栈Python 3.8无第三方依赖纯标准库实现import jsonfrom datetime import datetime, timedeltafrom 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 nameself.phone phoneself.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 fL{datetime.now().strftime(%Y%m%d%H%M%S)}self.sitter sitterself.start_date start_date # 格式YYYY-MM-DDself.end_date end_dateself.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 fR{datetime.now().strftime(%Y%m%d%H%M%S)}self.owner ownerself.pet_name pet_nameself.start_date start_dateself.end_date end_dateself.budget budget # 最高预算元/天self.description description # 额外说明self.posted_time datetime.now()class Match:匹配记录def __init__(self, listing: Listing, request: Request, deposit: float):self.match_id fM{datetime.now().strftime(%Y%m%d%H%M%S)}self.listing listingself.request requestself.deposit deposit # 押金元self.status pending # pending/confirmed/completed/cancelledself.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 fS{len(self.sitters)1}sitter Sitter(sitter_id, name, phone, location, space_desc,price, max_pets, accepted_types)self.sitters.append(sitter)return sitterdef register_owner(self, name: str, phone: str, location: str,pet_type: str, pet_size: str, special_needs: str ) - PetOwner:注册宠物主人owner_id fO{len(self.owners)1}owner PetOwner(owner_id, name, phone, location, pet_type,pet_size, special_needs)self.owners.append(owner)return ownerdef 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 listingdef 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 requestdef _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_dtdef 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) andsitter.location request.owner.location andrequest.pet_type.split()[0] in sitter.accepted_types and # 匹配宠物大类listing.sitter.price request.budget andsitter.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, keylambda x: x[1], reverseTrue)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 matchdef 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李阿姨, phone13800138000, location北京市朝阳区,space_desc独立阳光房带猫爬架和玩具, price80, max_pets2,accepted_types[猫, 小型犬])owner1 system.register_owner(name张先生, phone13900139000, location北京市朝阳区,pet_type布偶猫, pet_size小型, special_needs需每日梳毛)# 2. 发布寄养信息需求listing1 system.post_listing(sittersitter1, start_date2024-08-01, end_date2024-08-07)request1 system.post_request(ownerowner1, pet_name雪球, start_date2024-08-01, end_date2024-08-07,budget100, description猫咪性格温顺已绝育)# 3. 智能匹配matches system.match_sitter(request1)if not matches:print(未找到匹配的寄养人)returnbest_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, deposit200)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_successfulTrue)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框架对接本核心逻辑。欢迎关注我有更多编程干货等着你