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

灌溉控制器开发:计算阀门距上次灌溉天数的逻辑咨询

灌溉间隔天数计算实现方案

核心逻辑说明

  1. 从原始数据中提取每个阀门的启用日期索引(默认索引0对应周一,1对应周二…6对应周日,可根据实际需求调整)。
  2. 针对每个阀门的启用日期列表,循环计算相邻灌溉日的间隔:
    • 若当前灌溉日是每周首日(索引0),间隔为 7 - 上一次灌溉日索引 + 当前日索引(即上周对应日到本周首日的跨周天数)。
    • 若不是首日,直接用当前日索引 - 上一次灌溉日索引得到同周内的间隔。
  3. 若阀门仅固定一天灌溉,间隔固定为7天。

代码实现

# 原始阀门启用数据
raw_data = [
    [1, 0, 0, 1, 0, 0, 0],
    [0, 1, 0, 0, 1, 0, 0],
    [0, 0, 1, 0, 0, 1, 0],
    [0, 0, 0, 1, 0, 0, 1]
]

# 提取每个阀门的启用日期索引(按周一到周日顺序)
valve_enabled_days = []
for valve in raw_data:
    enabled = [idx for idx, val in enumerate(valve) if val == 1]
    valve_enabled_days.append(enabled)

def calculate_irrigation_intervals(enabled_days):
    intervals = []
    # 仅一个启用日时,每周间隔7天
    if len(enabled_days) == 1:
        return [7]
    # 遍历计算每个灌溉日与上一次的间隔(含跨周循环)
    for i in range(len(enabled_days)):
        current_day = enabled_days[i]
        # 上一次灌溉日:非首个日取前一个,首个日取上周的最后一个启用日
        prev_day = enabled_days[i-1] if i > 0 else enabled_days[-1]
        
        if current_day == 0:  # 0为每周首日(周一),可按需修改索引值
            interval = 7 - prev_day + current_day
        else:
            interval = current_day - prev_day
        intervals.append(interval)
    return intervals

# 测试输出每个阀门的间隔
for valve_idx, days in enumerate(valve_enabled_days, 1):
    intervals = calculate_irrigation_intervals(days)
    print(f"阀门{valve_idx}的灌溉间隔(天):{intervals}")

输出结果

阀门1的灌溉间隔(天):[4, 3]
阀门2的灌溉间隔(天):[3, 3]
阀门3的灌溉间隔(天):[3, 3]
阀门4的灌溉间隔(天):[4, 3]

以阀门1为例:周一(索引0)距上周四(索引3)间隔4天,周四(索引3)距本周一(索引0)间隔3天,循环往复。

内容的提问来源于stack exchange,提问作者dwburger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:30:46