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

小型项目循环开发问题:按员工计数3:1比例插入轮休替班行

轮休替班行插入实现方案

核心切入点

卡实现的核心原因大多是默认按单工单凑3人阈值,这个逻辑不需要按工单拆分员工计数,只要把所有工单的员工当成连续排队的整体,每凑齐3人就给这组人配1个放在组首的替班即可。

分步实现逻辑

  • 提前初始化两个遍历用变量:
    • 累计已统计员工数cum_emp,初始值为0
    • 当前待插入的替班序号relief_idx,初始值为1
  • 新建空列表存储最终结果,不要直接在原表上改数据,避免顺序错乱
  • 记住规则:每累计员工数到达3的整数倍,下一个位置就是新一组员工的起点,需要插入对应替班;累计数为0的位置也就是全表最开头,是第一组员工的起点,直接插入第一个替班
  • 逐行遍历原始工单数据:
    1. 逐人累加当前工单的员工数,累加过程中只要累计值碰到3的整数倍,就往结果列表里插入1条当前序号的替班记录,替班序号加1
    2. 当前工单所有员工数累加完成、该插的替班都插完后,再把当前原始工单行塞进结果列表
    3. 更新累计员工数为累加完本行后的数值
  • 遍历完所有原始行,结果列表里的顺序就是最终需要的表格顺序

逻辑验证(匹配示例数据)

按上述规则走你给出的测试数据,输出完全符合预期:

  • 累计为0的全表起始位置,插入替班1,之后放123(2人)、456(1人),累计到3
  • 累计到3的位置在456行之后、101行之前,插入替班2,之后放101(3人),累计到6
  • 累计到6的位置在101行之后、112行之前,插入替班3,之后放112(2人)、131(1人),累计到9
  • 累计到9的位置在131行之后、161行之前,插入替班4;继续累加161工单的员工,凑够3人后累计到12,还是在161工单的员工区间内,继续插入替班5
  • 两个替班插完后放161(5人),累计到14,遍历结束

极简逻辑参考(Python示例)

# 原始数据格式:(工单号, 员工数)
raw_data = [(123,2), (456,1), (101,3), (112,2), (131,1), (161,5)]
result = []
cum_emp = 0
relief_idx = 1

# 插入全表开头的第一个替班
result.append(("[Blank row - Break Relief {}]".format(relief_idx), ""))
relief_idx += 1

for wo, emp_cnt in raw_data:
    added = 0
    # 判断当前行员工能凑出几个满3人的组
    while added < emp_cnt:
        gap = 3 - (cum_emp % 3)
        if added + gap > emp_cnt:
            # 凑不满下一组,直接累加剩余员工数
            cum_emp += (emp_cnt - added)
            added = emp_cnt
        else:
            # 凑满一组,累加人数后插入替班
            added += gap
            cum_emp += gap
            result.append(("[Blank row - Break Relief {}]".format(relief_idx), ""))
            relief_idx += 1
    # 所有替班插完再放入当前工单行
    result.append((wo, emp_cnt))

# 输出结果即可直接写入表格
for row in result:
    print(row)

运行代码输出的行顺序和你给出的期望效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:09:18