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

Python(Tkinter)灌溉定时器:求阀门工作日间隔天数的实现方法

实现思路与代码示例

核心步骤

  1. 建立星期与数字的映射
    把星期字符串转换成0-6的数字(比如周日=0,周一=1…周六=6),方便计算天数差:
day_map = {
    'Sunday': 0,
    'Monday': 1,
    'Tuesday': 2,
    'Wednesday': 3,
    'Thursday': 4,
    'Friday': 5,
    'Saturday': 6
}
  1. 拆分并清洗单阀门的日期列表
    先把总日期列表按阀门拆分(建议从复选框提取时就按阀门分组存储,避免多阀门数据混合),然后对单个阀门的日期做去重、排序:
# 假设阀门1的工作日期列表是 valve1_days = ['Sunday', 'Tuesday', 'Friday']
# 去重并转换为数字格式
valve_days_num = [day_map[day] for day in set(valve1_days)]
# 按星期顺序排序
sorted_days = sorted(valve_days_num)
  1. 计算相邻日期间隔(含跨周)
    遍历排序后的日期列表,计算常规相邻间隔;最后一个日期到下一周第一个日期的间隔,用「下一周首个日期的数字+7」减去最后一个日期的数字:
intervals = []
n = len(sorted_days)

if n == 1:
    # 仅设置一个工作日期时,间隔固定为7天(每周循环)
    intervals.append(7)
else:
    # 计算非跨周的相邻间隔
    for i in range(n - 1):
        intervals.append(sorted_days[i+1] - sorted_days[i])
    # 计算跨周的最后一个到第一个的间隔
    cross_interval = (sorted_days[0] + 7) - sorted_days[-1]
    intervals.append(cross_interval)

示例验证

以阀门1的sorted_days = [0,2,5]为例,计算得到的intervals = [2,3,2]:

  • 周日(0)到周二(2):2天
  • 周二(2)到周五(5):3天
  • 周五(5)到下周日(0+7=7):7-5=2天,完全符合需求。

注意事项

  • 拆分阀门日期时,必须保证每个阀门的日期列表独立,避免多阀门数据混淆;
  • 去重操作是为了避免用户重复勾选同一天导致计算错误;
  • 需处理边界情况:如果阀门仅设置一个工作日期,间隔固定为7天。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:01:10