如何为Python的_constructeur_ville函数添加参数调整道路时长?
实现方案
核心思路
原函数生成的道路用元组存储导致无法修改,因此在道路生成阶段就应用调整规则,而非事后修改。给_constructeur_ville新增可选参数,接收需要调整的道路配置,生成道路时自动计算调整后的时长。
参数设计
新增参数road_adjustments,推荐使用字典格式:
- 键:地点对(如
(e_9, e_13),若道路为无向图,需兼容(e_13, e_9)的匹配) - 值:时长调整量(正数为增加时长,负数为减少时长)
代码实现示例
假设原函数的基础结构如下:
def _constructeur_ville(): # 初始化16个地点 emplacements = [Emplacement(f"e_{i}") for i in range(1, 17)] # 原始道路列表(元组格式) roads = [ (emplacements[8], emplacements[12], 10), # e_9到e_13,原时长10 # 其他道路定义... ] return Ville(emplacements, roads)
修改后的函数实现:
def _constructeur_ville(road_adjustments=None): # 默认无调整 adjustments = road_adjustments or {} emplacements = [Emplacement(f"e_{i}") for i in range(1, 17)] # 先用列表存储原始道路(可变结构),应用调整后再转元组 raw_roads = [ [emplacements[8], emplacements[12], 10], # 其他道路定义... ] # 遍历应用调整规则 for road in raw_roads: road_key = (road[0], road[1]) reverse_key = (road[1], road[0]) # 优先匹配正向地点对,无匹配则尝试反向 adjust_val = adjustments.get(road_key) or adjustments.get(reverse_key) if adjust_val is not None: road[2] += adjust_val # 转换为元组列表,保持原存储结构 roads = [tuple(road) for road in raw_roads] return Ville(emplacements, roads)
使用示例
将e_9到e_13的时长增加2:
# 定义调整规则 adjust_rules = { (emplacements[8], emplacements[12]): 2 } # 生成带调整的城镇地图 town_map = _constructeur_ville(road_adjustments=adjust_rules)
若要减少时长,将调整值设为-2即可。
额外优化点
- 若道路为有向图,可移除反向地点对的匹配逻辑;
- 可添加时长合法性校验(如禁止负时长):
if adjust_val is not None: new_duration = road[2] + adjust_val if new_duration < 0: raise ValueError(f"道路时长不能为负,调整后时长为{new_duration}") road[2] = new_duration
内容的提问来源于stack exchange,提问作者Smorg
相关产品推荐
相关产品推荐

