Python解析变量号

时间:2015-03-08 22:23:45

标签: python python-2.7 flask

我有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"
}

我该怎么办?什么是正确的方法?

1 个答案:

答案 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循环。请注意,这两种方式实现了相同的目标,并且在结果方面是等效的。