2016-11-09 9 views
0

私はLIGHTxという名前のブール変数でいくつかのバイナリシングルシステムを作ろうとしています。将来の計算のためのリストに固定小数点要素を持つPython booleanリスト

LIGHT1 = True 
LIGHT2 = True 
LIGHT3 = False 
LIGHT4 = False 

次に、I巣これらの変数を、

signal = [LIGHT1, LIGHT2, LIGHT3, LIGHT4] 

は現在、私は私の信号である数をintにリストを変換するPython: Boolean List to Binary StringConvert base-2 binary number string to intからのアイデアを使用しています。ここでは、[1,1,0,0] 12

In [97]: boolList2BinString(signal) 
Out[97]: 12 

私の質問であることを意味します:

  1. にはどうすれば自動的にライトの値を更新することで「信号」の要素を更新することができ、 signal = [LIGHT1, LIGHT2, LIGHT3, LIGHT4]を繰り返し実行するのではなく、 Whitchは、残りのコードでは、LIGHTx = xxxxboolList2BinString(signal)を実行するだけです。 (たぶんC++のポインタのような何か?)
  2. 質問1では不可能な場合は、リスト内のLIGHTの順序を修正できる方法はありますか?

[更新]してください

を除外する方法その '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

おそらく、何らかの種類のラッパーが必要です。

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 

もちろん、メソッドの名前を変更することができます。

あなたはブール値を保持するクラスを作成することができます
0

は、それは、ポインタ、その後

>>> class Light: 
...  def __init__(self, value): 
...    self.value = value 
...  def get(self): 
...    return(self.value) 
...  def set(self, value): 
...    self.value = value 

値、またはlight.set()値を設定するを取得するためにlight.get()を使用するように行動するだろうあなたは、整数のビットを設定するために、特殊なプロパティクラスを使用することができ

>>> for l in lights: 
...  print(l.get()) 
... 
True 
False 

>>> light2.set(True) 
>>> for l in lights: 
...  print(l.get()) 
... 
True 
True 
>>> 
0

:セットを示す

>>> Light1 = light(True) 
>>> Light2 = light(False) 
>>> lights = [light1, light2] 
>>> for l in lights: 
...  print(l.get()) 
... 
True 
False 

例。ここで

は一例です:あなたはその後、それを使用することができます

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) 

単に:(両方のPython 2.7とPython 3.5でテスト)

>>> s = Signal() 
>>> s.value 
0 
>>> s.l1 
False 
>>> s.l1 = True 
>>> s.l1 
True 
>>> s.value 
8 

関連する問題