You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 23:39:57