定义将员工分配到最近的工作站的功能

时间:2019-06-03 18:55:39

标签: python class

首先,我是python编程的新手,所以请多多包涵。 我正在尝试编写一个非常简单的代码,将员工分配到最近的工作站。

为此,我创建了两个类,一个Employee类和一个Workstation类。它们的属性基本相同,都具有名称和位置(location属性用整数表示,以保持其简单性)。 Employee类还具有一个名为workstation的附加属性,默认情况下将其设置为"not_assigned_yet"

这是到目前为止我的代码:

class Workstation:

  def __init__(self, name, location):
      self.name=name
      self.location=location

W1=Workstation("Workstation1", 0)
W2=Workstation("Workstation2", 5)

class Employee:

    def __init__(self, name, location,workstation):
        self.name=name
        self.location=location
        self.workstation=workstation

E1=Employee("Employee1", 3, "not_assigned_yet")
E2=Employee("Employee2", 6, "not_assigned_yet" )

我想为Employee类定义一个方法,该方法找到与Workstation对象最接近位置的Employee并将Employee分配给那个工作站

例如,如果我要将E1分配给它最近的工作站,结果将或多或少像这样:

E1.workstation=W1.name

那么我该如何将其放入通用代码中?

2 个答案:

答案 0 :(得分:1)

首先,您需要使用数组(或字典)。因此,您的代码将如下所示:

W = []
W.append(W1)
W.append(W2)
E = []
E.append(E1)
E.append(E2)

第二,您可以遍历雇主,然后遍历工作站以找到最佳匹配项:

import math
for e in E:
  closest_distance = math.inf
  closest_workstation = ""
  for w in W:
    diff = abs(w.location - e.location)
    if diff < closest_distance:
      closest_distance = diff
      closest_workstation = w
  e.workstation = closest_workstation.name

for e in E:
  print(e.workstation)

如果愿意,可以在员工类的方法中转换上面的代码片段。根据您遵循的设计模式,可以建议(活动记录)或不建议这样做(DAO)。

答案 1 :(得分:0)

非常感谢您的帮助。我最终在arnaldocan和JEX的帮助下找到了问题。 首先,我使用了JEX建议的min()函数来查找最近的工作站(我必须首先创建一个包含所有工作站的不同位置的列表(W))。

 def assign(self):
        a= (min(W, key=lambda x: abs(x-self.location)))

然后我跟随arnaldocans建议并遍历所有工作站(WW)的列表,如果该列表中具有最接近工作站的整数,则该员工的位置将使用其名称:

def assign(self):
    a= (min(W, key=lambda x: abs(x-self.location)))
    for w in WW:
        if a==w.location:
            self.workstation=w.name
    print(self.workstation)

几乎全部。我创建了3个工作站和3个在不同位置的员工。当我运行该方法时,每个员工都被分配到最近的工作站。这里有完整的代码:

class Workstation:

    def __init__(self, name, location):
        self.name=name
        self.location=location

W1=Workstation("Workstation1", 0)
W2=Workstation("Workstation2",10)
W3=Workstation("Workstation3", 5)

W = [W1.location, W2.location, W3.location]
WW=[W1, W2, W3]

class Employee:

    def __init__(self, name, location,workstation):
        self.name=name
        self.location=location
        self.workstation=workstation


    def assign(self):
        a= (min(W, key=lambda x: abs(x-self.location)))
        for w in WW:
            if a==w.location:
                self.workstation=w.name
        print(self.workstation)


E1=Employee("Employee1", 9, "not_assigned_yet")
E2=Employee("Employee2", 7, "not_assigned_yet" )
E3=Employee("Employee3", 2, "not_assigned_yet" )

E1.assign()
E2.assign()
E3.assign()