我试图通过用LIGHTx命名的布尔变量来制作一些二进制信号系统。
LIGHT1 = True
LIGHT2 = True
LIGHT3 = False
LIGHT4 = False
接下来,我将这些变量嵌套到列表中以供将来计算,
signal = [LIGHT1, LIGHT2, LIGHT3, LIGHT4]
目前我正在使用Python: Boolean List to Binary String和Convert base-2 binary number string to int的想法将列表转换为我的信号的int号。这里,[1,1,0,0]表示12。
In [97]: boolList2BinString(signal)
Out[97]: 12
我的问题是:
signal = [LIGHT1, LIGHT2, LIGHT3, LIGHT4]
? Whitch表示,在我的其余代码中,我只需要运行LIGHTx = xxxx
和boolList2BinString(signal)
。 (也许某种方式像C ++的指针?)[更新]
请排除构建“'信号”的方式。列表中的' boolList2BinString'功能。
原件:
def boolList2BinString(lst):
return int('0b' + ''.join(['1' if x else '0' for x in lst]), 2)
内部构建:
def boolList2BinString():
osignal = [LIGHT1 , LIGHT2 , LIGHT3 , LIGHT4 ]
return int('0b' + ''.join(['1' if x else '0' for x in signal ]), 2)
提前致谢!
答案 0 :(得分:0)
也许你只需要某种包装。
class Light(object):
def __init__(self, state):
self.state = state
def false(self):
self.state = False
def true(self):
self.state = True
LIGHT1 = Light(True)
LIGHT2 = Light(True)
LIGHT3 = Light(False)
LIGHT4 = Light(False)
signal = [LIGHT1, LIGHT2, LIGHT3, LIGHT4]
然后您只需将每个灯光的状态更改为LIGHT1.true()或LIGHT1.false(),signal
列表中的值将自动更改。
LIGHT1.false()
LIGHT1.state # False
LIGHT1.true()
LIGHT1.state # True
当然,方法命名可以改变。
答案 1 :(得分:0)
你可以创建一个类来保存布尔值,然后它就像一个指针
>>> class Light:
... def __init__(self, value):
... self.value = value
... def get(self):
... return(self.value)
... def set(self, value):
... self.value = value
然后使用light.get()来获取值,或使用light.set()来设置值
>>> Light1 = light(True)
>>> Light2 = light(False)
>>> lights = [light1, light2]
>>> for l in lights:
... print(l.get())
...
True
False
示例显示set:
>>> for l in lights:
... print(l.get())
...
True
False
>>> light2.set(True)
>>> for l in lights:
... print(l.get())
...
True
True
>>>
答案 2 :(得分:0)
您可以使用特殊属性类来设置整数位。
以下是一个例子:
class Light(property):
def __init__(self, rank):
self.rank= rank
super(Light, self).__init__(self._get, self._set)
def _get(self, signal):
return (signal.value & (1 << self.rank)) != 0
def _set(self, signal, value):
if value:
signal.value |= 1 << self.rank
else:
signal.value &= ~(1 << self.rank)
class Signal(object):
def __init__(self, value=0):
self.value = value
l1 = Light(3)
l2 = Light(2)
然后您可以使用它:
>>> s = Signal()
>>> s.value
0
>>> s.l1
False
>>> s.l1 = True
>>> s.l1
True
>>> s.value
8
(在Python 2.7和Python 3.5上测试)