【问题标题】:Python Parse Variable NumberPython解析变量数
【发布时间】:2015-05-10 01:19:45
【问题描述】:

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

我该怎么做?正确的做法是什么?

【问题讨论】:

  • ...那你在问什么?
  • 怎么做!我得到了字符串,现在我需要 JSON
  • 到目前为止你尝试过什么?这不是一个代码编写服务,您需要展示您尝试过的内容/无效的内容。

标签: python python-2.7 flask


【解决方案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 循环用 Falses 填充列表。

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

【讨论】:

  • 完美!我正在尝试使用 .split('1') 但后来意识到这将是一大块代码,我也关心运行时间。我要继续学习!感谢您的帮助!
  • @CESCO 很高兴我能帮上忙。由于我正确回答了您的问题,如果您将我的答案标记为正确,我将不胜感激(只需单击旁边的检查)。
  • 对不起,我没有足够的声誉@pzp1997
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 2021-11-06
  • 2017-06-12
  • 1970-01-01
相关资源
最近更新 更多