【发布时间】:2021-10-05 12:33:38
【问题描述】:
我是 Python 编码的初学者,但我希望从几个因素中找到一个输出。我会尽力解释的。
有6个区域ZONE = ["RED", "GREEN", "BLUE", "YELLOW", "PINK", "WHITE"]
为了争论,目前有两个设备,但还会有更多,这些设备分别称为 PIR 和 SMOKE
当一个新设备上线时,我是 python 为它分配一个新的 ZONE 颜色,但如果 ZONE 已经包含相同类型的设备,它应该选择另一个 ZONE,除非如果所有 ZONE 都已经有相同的设备,那么它可以开始加倍等等。
当每个设备上线时,我会收集设备的详细信息,例如 MAC 地址和设备类型……数组的索引是一个设备
MAC = ["ABC","DEF","GHI"]
TYPE = ["PIR","PIR","SMOKE"]
ZONE = ["RED","GREEN","RED"]
当 4 号设备上线时,我希望 python 告诉我下一个可用的 ZONE 颜色是什么。由于我已经在 ZONE RED 和 GREEN 中获得了两个 PIR,我希望 PIR 设备的下一个结果是 BLUE,而下一个 SMOKE 设备是 GREEN。然后 Python 会将 ZONE 颜色发送到新设备,以便设备可以设置其区域颜色模式(前面的通信已经开始工作)。
我已经部分能够让一个测试项目工作,但它只是告诉我下一个可用的颜色,但没有考虑设备类型。我的例子如下:
ZONE = ["RED", "GREEN", "BLUE", "YELLOW", "PINK", "WHITE"]
ZONEDevices = [0,0,0,0,0,0]
DEVICES = ["PIR", "PIR", "SMOKE"]
MAC = ["123", "456", "789"]
DEVICEZONE = ["RED", "GREEN", "RED"]
# Following counts how many devices are in each zone and adds to the array
ZONEDevices[0] = DEVICEZONE.count("RED")
ZONEDevices[1] = DEVICEZONE.count("GREEN")
ZONEDevices[2] = DEVICEZONE.count("BLUE")
ZONEDevices[3] = DEVICEZONE.count("YELLOW")
ZONEDevices[4] = DEVICEZONE.count("PURPLE")
ZONEDevices[5] = DEVICEZONE.count("WHITE")
IN = "PIR-ABC" # This is what goes into the python script
OUT = IN.split("-") # Splits the input into an array
print(OUT) # OUTPUT: ['PIR', '123']
ID = ZONEDevices.index( min(ZONEDevices) ) # OUTPUT HERE IS 2, ZONE-BLUE
if (ID == 0): print("ZONE-RED")
if (ID == 1): print("ZONE-GREEN")
if (ID == 2): print("ZONE-BLUE")
if (ID == 3): print("ZONE-YELLOW")
if (ID == 4): print("ZONE-PURPLE")
if (ID == 5): print("ZONE-WHITE")
DEVICES.append(OUT[0]) # adds the input device type to the devices array
MAC.append(OUT[1]) # adds the input device MAC to the MAC array
print(DEVICES,MAC) # OUTPUT: ['PIR', 'PIR', 'SMOKE', 'PIR'] ['123', '456', '789', 'ABC']
#but what I am wanting to achieve is to get the script to give me the next
#available zone to use if a device is not already active in that zone
#DEVICEZONE.append( UNKNOWN )
我希望这是有道理的。我不太确定从哪里开始。任何帮助将不胜感激。
【问题讨论】:
-
请从intro tour 重复on topic 和how to ask。 “告诉我如何解决这个编码问题”不是堆栈溢出问题。我们希望您做出诚实的尝试,然后然后就您的算法或技术提出一个具体的问题。您所问的内容适合教程网站或一般帮助论坛。
-
I’m stuck,没有具体细节,也没有你的适用研究,是问题分析或规范导师的问题。对于 Stack Overflow,它不够专注。请注意,您确实知道接下来要采取哪些合乎逻辑的步骤。您需要弄清楚您(人类)将如何在纸上执行此操作,然后将您的数据表示和处理步骤转换为 Python。
-
很抱歉造成混淆,我已经用一个简单的示例更新了我的代码(我试图不让它过于复杂)。希望这能更好地解释事情......@Prune
-
在构建问题标题时,请尝试针对您在常见问题解答中的问题中看到的内容。 “请帮助”不符合格式——目标是在尽可能小的空间内提供尽可能多的信息,以帮助人们确定他们是否有信息来回答问题,或者他们是否有同样的问题并且愿意从它的答案中受益。
-
您能否重新关注这一点,少关注您要解决的更大问题,而多关注阻碍您自己解决问题的具体技术问题?