【问题标题】:Assign two elements and form a list in Python在 Python 中分配两个元素并形成一个列表
【发布时间】:2018-05-20 11:14:14
【问题描述】:

在我的项目中,我必须定义一个函数,其中我得到下面两个列表和一个小时,通过早期文件提取(这些完全是任意的,但数据的顺序是相同的)。 “return”命令必须返回一个包含操作员姓名的列表,后跟客户姓名。

[('Ricardo Tavares', 'portuguese', '(mobiles; printers)', '14:15', 42), ('Carl Thompson', 'english', '(laptops)', '14:17', 54), ('Nuria Castro', 'spanish', '(cameras; hifi)', '14:24', 37), ('Giovanni Olivetti', 'italian', '(laptops; bimby; hifi)', '14:52', 21), ('Georg Muller', 'deutsch', '(cameras)', '15:05', 31)]


[('Henry Miller', 'english', 'laptops', 'premium', 3), ('Francois Greenwich', 'spanish', 'cameras', 'premium', 6), ('Ricardo Carvalho', 'portuguese', 'refrigerators', 'premium', 2)]

目标是将操作员(第一个列表)分配给客户(第二个列表)。必须根据知识领域(例如手机、打印机)和操作员的语言(例如葡萄牙语、英语)以及客户的帮助主题(例如笔记本电脑、相机)和他们都说的语言(例如。 英式西班牙语)。此外,有必要记住,必须先服务于“高级”的客户,而不是其他“高级”的客户。操作员对客户的分配必须根据他们工作的分钟数(每个列表元素的最后一个元组值)以及他们最后一次回答客户的时间(例如 14:15)来完成。

在所有这些条件下,除了变得有点混乱之外,我不太清楚哪种方法是解决此代码的最有效方法,而在编程时不会过于防御!

这是我现在拥有的,但列表保持空白。

def assign_tasks(operators, requests, current_time):

operators = sorted(operators, key=itemgetter(3), reverse=False)
requests = sorted(requests, key=itemgetter(3), reverse=True)
tasks = []

langr = 0 #Variable that gets the language of the request's file (customer's language)
lango = 0 #Variable that gets the language of the operator's file (operator's language) 
for i in range(0, len(requests)):
    langr = requests[i][1]                                   #What language does the customer speaks?
    for k in range(0, len(operators)):
        lango = operators[k][1]                              #What language does the operator speaks?
        if langr == lango:                                   #Do they speak the same language?
            for j in range(0, len(operators[k][2])):
                if operators[k][2][j] == requests[i][2]:     # The operator knows how to solve the client's problem? If yes, then group them together.
                    tasks.append((current_time, operators[k][0], requests[i][0]))
                    operators.remove(operators[k])
                    requests.remove(requests[i])
print(tasks) 
return tasks


operators = [('Leticia Ferreira', 'portuguese', '(laptops)', '11:03', 15), ('Atilio Moreno', 'portuguese', '(laptops)', '10:58', 104), ('Ruth Falk', 'german', '(phones; hifi)', '11:06', 150), ('Marianne Thibault', 'french', '(phones)', '11:09', 230), ('Mariana Santana', 'portuguese', '(phones)', '11:11', 230), ('Beate Adenauer', 'german', '(hifi; phones)', '11:12', 140), ('Romana Cerveny', 'czech', '(phones)', '11:13', 213), ('Zdenka Sedlak', 'czech', '(phones)', '11:13', 56)]
requests = [('Christina Holtzer', 'german', 'hifi', 'fremium', 7), ('Andrej Hlavac', 'czech', 'phones', 'fremium', 9), ('Dulce Chaves', 'portuguese', 'laptops', 'fremium', 15), ('Otavio Santiago', 'portuguese', 'laptops', 'fremium', 15), ('Dina Silveira', 'portuguese', 'phones', 'fremium', 9), ('Rafael Kaluza', 'slovenian', 'laptops', 'fremium', 13), ('Sabina Rosario', 'portuguese', 'laptops', 'premium', 10), ('Nuno Rodrigues', 'portuguese', 'laptops', 'fremium', 12), ('Feliciano Santos', 'portuguese', 'phones', 'fremium', 12)]

current_time = "14:55 06:11:2017"

assign_tasks(operators, requests, current_time)

有什么问题吗?

【问题讨论】:

  • 您的预期输出是什么?你忘了显示这个。
  • 向我们展示您输入示例的预期结果。
  • 另外,你尝试了什么
  • 解决具有挑战性的问题并成为一名更好的程序员的唯一方法就是深入研究并亲自动手。如果防御性编程是您的直观方法,那么从它开始,然后从那里开始。如果您真的被卡住了,请回到这里,努力展示自己,我们很乐意为您提供帮助。
  • But what is this ? 他编辑了,但我记得这篇文章,我认为他发布了完全相同的内容。你应该和你的同学谈谈。你们可能都有相同的想法。我可能是错的:但是这两个主题太接近了,不能不问。 ;)

标签: python list tuples assign


【解决方案1】:

我不会在这个答案中显示任何代码,而是我会采用一种简单的算法方法。剩下的就看你自己了。

我会采取的方法如下:

  • 遍历客户

  • 为每位客户检查客户说什么语言。

    • 遍历操作员并检查每个操作员是否与客户使用相同的语言。
    • 如果客户这样做,请检查他/她是否涵盖了客户需要帮助的问题。
    • 如果他/她这样做,请将操作员分配给客户。 (我不知道你会如何表达,所以我就这样吧。
  • 为下一位客户重复上述过程,直到所有客户都得到照顾。

我刚刚提出的这个算法绝不是完美的,但如果这是你正在寻找的,它应该可以完成工作。

现在有趣的部分是实现它(至少对我而言)。

希望这会有所帮助。

【讨论】:

  • 谢谢,尼古拉斯!我听从了你的建议,但我的清单一直是空白的,你能看一下吗?我已经编辑了帖子并添加了我的代码。
  • 抱歉,我已经离线几天了。自从我编写 python 以来已经有一段时间了。这就是为什么我没有提供任何代码。我不确定我是否可以帮助调试。
【解决方案2】:

我很久没有用python写代码了,所以我在这方面的经验非常有限,但是在这种情况下你应该做的就是一步一步地遍历代码中的每个点,看看它做了什么。通常你会发现在某处某处输出的东西不是你所期望的并且破坏了代码。我花了大约 5 分钟设置代码并沿途添加一些打印语句以查看代码输出并立即发现问题。 https://repl.it/repls/MoistInstructiveIcelandichorse

显然 operator[k][2] 被视为字符串而不是列表,因此当您遍历它时,您将遍历每个字符而不是每个项目。快速查看您的列表后,您的操作员专业知识列表似乎是一个字符串而不是列表。我不确定这是否是故意的,但要使您的代码正常工作,您需要以某种方式对其进行排序。

【讨论】:

  • 嗨,Slidy!非常感谢您的回答。我现在已经编辑了,现在一切都很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
  • 2018-10-25
  • 1970-01-01
  • 2019-01-06
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多