Python解析变量号

Python解析变量号,python,python-2.7,flask,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", "ch

我有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"
}
我该怎么做?正确的方法是什么?

给你:

#!/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)
要使用,只需调用以数字为参数的函数。它将返回一个真/假值列表,您可以反复查看哪个通道处于打开状态,也可以使用chan_values()检查通道6[5]

现在来解释一下……第一个while循环将数字解析为单个数字。如果数字为1,则返回
True
,否则返回
False
。如果输入的数字不是8位数(如111),则第二个while循环用
False
s填充列表

编辑:
将第二个while循环替换为更快的一行(
channels+=[False]*(8-len(channels))
)。请注意,这两种方法实现了相同的目标,并且在结果方面是等效的。

…那么,你在问什么?如何做到这一点!我拿到绳子了,现在我需要JSON你试过什么了?这不是一个代码编写服务,你需要展示你尝试过的/不起作用的。完美!我曾尝试使用.split('1'),但后来意识到这将是一个巨大的代码块,我也关心运行时。我要继续学习!谢谢你的帮助@塞斯科很高兴我能帮忙。由于我正确回答了您的问题,如果您将我的答案标记为正确(只需单击旁边的复选框),我将不胜感激。抱歉,我没有获得足够的声誉@pzp1997