小型项目循环开发问题:按员工计数3:1比例插入轮休替班行
轮休替班行插入实现方案
核心切入点
卡实现的核心原因大多是默认按单工单凑3人阈值,这个逻辑不需要按工单拆分员工计数,只要把所有工单的员工当成连续排队的整体,每凑齐3人就给这组人配1个放在组首的替班即可。
分步实现逻辑
- 提前初始化两个遍历用变量:
- 累计已统计员工数
cum_emp,初始值为0 - 当前待插入的替班序号
relief_idx,初始值为1
- 累计已统计员工数
- 新建空列表存储最终结果,不要直接在原表上改数据,避免顺序错乱
- 记住规则:每累计员工数到达3的整数倍,下一个位置就是新一组员工的起点,需要插入对应替班;累计数为0的位置也就是全表最开头,是第一组员工的起点,直接插入第一个替班
- 逐行遍历原始工单数据:
- 逐人累加当前工单的员工数,累加过程中只要累计值碰到3的整数倍,就往结果列表里插入1条当前序号的替班记录,替班序号加1
- 当前工单所有员工数累加完成、该插的替班都插完后,再把当前原始工单行塞进结果列表
- 更新累计员工数为累加完本行后的数值
- 遍历完所有原始行,结果列表里的顺序就是最终需要的表格顺序
逻辑验证(匹配示例数据)
按上述规则走你给出的测试数据,输出完全符合预期:
- 累计为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
相关产品推荐
相关产品推荐

