2017-02-27 1 views
2

バイナリの右から4番目のビットがアクティブであるかどうかをチェックする関数を作成しています。ここでPython:raw_input()をバイナリに変換し、それを関数で使用する

は私のコードです:

bit2= 0b1000 
entry = bin(int(raw_input("Type a number : "))) 


def verifier_bit4(entry): 
    if entry & bit2 > 0 : 
     return "on" 
    else: 
     return "off" 

print verifier_bit4(entry) 

バイナリ(例:エントリ= 0b1001)として自分自身にエントリの値を定義した場合には罰金働いていました。

しかし、私はそれをユーザーフレンドリーにし、raw_input()で数字を入力するように頼んだ。

は、その後、私はこのエラーメッセージました:

Traceback (most recent call last): File "python", line 11, in
File "python", line 6, in verifier_bit4 TypeError:
unsupported operand type(s) for &: 'str' and 'int'

を私は変数「エントリー」をチェックし、それは確かにバイナリなので、自分のコードが動作しない理由を私は理解していません。

誰かが助けてくれますか? :)実際

+1

"変数 'エントリ'を確認しましたが、実際にはバイナリです。しかし、Pythonには「バイナリ」型はありません。私はかなり 'bin'が文字列を返すと確信しています。 – Kevin

+0

@Kevin Pythonのバイナリタイプは間違いなく 'bool'です) – wim

答えて

3

binはバイナリで、数の文字列表現を返します。

>>> bin(123) 
'0b1111011' 

あなたはおそらくとにかくここintを使用したいので、あなたはただ、そのbin呼び出しを削除することができます。

+0

ありがとう@wim!私はbin()が文字列を返したのを知らなかった –

1

あなたはビットごとのオペランドのバイナリを必要としません:

>>> 32 & 8 
0 
>>> 12 & 8 
8 

彼らが整数で定義されている:あなたは、ユーザーがバイナリ表現で数字を入力するようにしたい場合は

bit2 = 0b1000 
entry = int(raw_input("Type a number : ")) 


def verifier_bit4(entry): 
    if entry & bit2 > 0 : 
     return "on" 
    else: 
     return "off" 

print verifier_bit4(entry) 
-1

、あなたはそれについてint()を伝える必要があります。

entry = int(raw_input("Type a number : "), 2) 

その後0b0010のような入力がpossiblですe。

関連する問題