首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为70名雇员安排2周假期

为70名雇员安排2周假期
EN

Stack Overflow用户
提问于 2017-08-30 20:38:56
回答 1查看 71关注 0票数 0

一般想法:

  1. 号码是1到6
  2. 每个人选择5个号码。
  3. 如果数字在3次后重复,则从所选的数字中选择next available
  4. 第一选择的数字是优先的,最后的是最不可取的。
代码语言:javascript
复制
- Jean chose 1,2,3,4,5
- Claude chose 1,2,3,4,5
- Van chose 1,2,3,4,5
- Dam chose 1,2,3,4,5

我希望得到最后结果,给出这些结果:

  • Jean = 1,2
  • 克劳德= 1,2
  • Van = 1,2
  • 大坝= 3,4

更新1:

代码语言:javascript
复制
from collections import OrderedDict

ids_names = {
    ("01", "Jean"),
    ("02", "Claude"),
    ("03", "Van"),
    ("04", "Damme"),
    ("05", "Kristopher"),
    ("06", "Bianca"),
}

week_pool = ([1,2,3,4,5,6,7])

employee_choices = OrderedDict([
    ("01", [1,2,3,4,5]),
    ("02", [1,2,3,4,5]),
    ("03", [1,2,3,4,5]),
    ("04", [1,2,3,4,5]),
    ("05", [2,3,4,5,6]),
    ("06", [1,2,3]),
])

assignments = [ ]

tracking = {week_num: 0 for week_num in week_pool}
for element in employee_choices.items():
    assignments.append(week_pool)
    print('assignments: {}'.format(assignments))
    for week_num in employee_choices:
        if tracking[week_pool] < 3:
            assignments[-1].append(week_pool)
            tracking[week_num] += 1
            if len(assignments[-1]) == 2:
                break

回溯(最近一次调用):第30行,在if trackingweek_pool < 3: TypeError: unhashable type:'list‘

更新工作!

代码语言:javascript
复制
weeks = list(range(1, 52))
tracking = {week_num: 0 for week_num in weeks}
assignments = [ ]
for preferences in [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]:
    assignments.append([ ])
    print('assignments: {}'.format(assignments))
    for week_num in preferences:
        if tracking[week_num] < 3:
            assignments[-1].append(week_num)
            tracking[week_num] += 1
            if len(assignments[-1]) == 2:
                break
EN

回答 1

Stack Overflow用户

发布于 2017-08-31 21:43:45

修订版

代码语言:javascript
复制
from collections import OrderedDict

# Translate employe ids
ids_names = {
    ("01", "Jean"),
    ("02", "Claude"),
    ("03", "Van"),
    ("04", "Damme"),
    ("05", "Kristopher"),
    ("06", "Bianca"),
}

week_pool = list(range(1, 53))
employee_choices = OrderedDict([
    ("01", [1,2,3,4,5]),
    ("02", [1,2,3,4,5]),
    ("03", [1,2,3,4,5]),
    ("04", [1,2,3,4,5]),
    ("05", [2,3,4,5,6]),
    ("06", [1,2,3]),
])

描述

08-31:你的开局很好。我将在这里更新笔记,并给你提示。几个小音符:

  1. 如果两个人的名字相同,就会在编程上感到困惑。你最好给员工分配号码,因为这些号码是独一无二的。因此,为了不混淆ids数和周数,让我们使用数字字符串。如果我们命名以找到一个名称,我们可以在以后搜索翻译字典。
  2. range()是获取整数跨度的一种更短的方法,但您的方法也有效。
  3. OrderedDict是一个很好的选择。你可以用这个来安排资历。你只需要确保你的每周都在一个单独的容器里,例如一张清单。我为后面的点添加了一些额外的名字。
  4. 在样式上,我们对变量名使用小写。此外,我们保持行短(79个字符),所以使用返回。

目标

  1. 构造输入数据(OK)
  2. 创建一个调度函数:
    • 处理员工和可用的周数
    • ..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45969329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档