私は、ビットマスクを介してコマンドに応答するためにグループ化できるいくつかのノードを持っています。たとえば、NodeAはグループ1とグループ5に属しています。どのグループに属しているかを尋ねると、17でバイナリに相当する「0b10001」が返されます。グループ2,7および9のノードは、それがグループ322( '0b101000010')に属していることを示します。指定されたノードがどのグループに属しているかをユーザーに表示する方法が必要です。 16グループの可能性があります。バイナリが16文字でない場合、私のコードは「文字列インデックスが範囲外です」エラーを返します。私はより良い方法があります知っている:(!やループ)pythonビットマスク内で1を見つける
def xref(grp):
a = bin(grp)
d = str(a)
if d[-1] == '1':
print "Group 1"
if d[-2] == '1':
print "Group 2"
if d[-3] == '1':
print "Group 3"
repeat for 16 groups
ビット演算子を使用できないのはなぜですか? – soon
単純なforループを持つビット演算子はおそらく正しい方法ですが、既存のコードを動作させるには 'd'が常に16文字の長さであることを確認する必要があります。これを行うには 'zfill'関数を使います。次のように: 'bin(grp)[2:] .zfill(16)'。このコードは、 'grp'が(' 0: 'prexifを切り捨てる' [2:] 'のために)非負であると仮定しています。 – Qwrk