我有8个频道,而关闭时他们得到的值= 0,而在:
ch1 = 1
ch2 = 10
ch3 = 100
ch4 = 1000
ch5 = 10000
ch6 = 100000
ch7 = 1000000
ch8 = 10000000
但是当我问打开哪个频道时,硬件会给我一个像
这样的总和111 or 10001000
意思是ch1,ch2和ch3 | ch4和ch8分别打开
我想以一种方式解析它,我可以用像
这样的每个通道状态写一个类似json的文件{
"ch1": "on",
"ch2": "off",
"ch1": "on"
}
我该怎么办?什么是正确的方法?
答案 0 :(得分:1)
你走了:
#!/usr/bin/env python2.7
def chan_values(num):
"""parses int into an array of True/False values for the channels"""
channels = []
while num > 0:
channels.append(num%10==1)
num /= 10
channels += [False]*(8-len(channels))
return channels
print chan_values(111)
print chan_values(10001000)
要使用,只需使用数字作为参数调用函数。它将返回一个True / False值列表,您可以迭代它们以查看哪些通道处于打开状态,或者您可以使用chan_values()[5]检查通道6。
现在为了解释......第一个while循环将数字解析为单个数字。如果数字为1,则返回True
,否则返回False
。如果输入的数字不是8位数(例如111),则第二个while循环用False
s填充列表。
修改强>
用更快的单行(channels += [False]*(8-len(channels))
)替换第二个while循环。请注意,这两种方式实现了相同的目标,并且在结果方面是等效的。