这个简单的程序检查用户提供的整数中的第4位是否打开。出现提示时#34;输入整数"你可以提供一个数字(例如,12),然后它将从一个字符串转换为一个整数,然后从base10转换为二进制。但是,尽管int()和bin()转换,我仍然会收到一条错误消息,指出& 无法在' str&#39上使用;和' int' 。
据我所知,int()和bin()函数,用户提供的数字在传递给check_bit4()函数时应该是一个按位整数。我错过了什么?
def check_bit4(x):
check = 0b00001000
if x & check > 0:
return("on")
else:
return("off")
x = bin(int(input("Enter Integer ")))
check_bit4(x)
文件" Problem3.py",第3行,在check_bit4
中如果x&检查> 0:
TypeError:&:' str'不支持的操作数类型和' int'
答案 0 :(得分:4)
没有理由使用bin(..)
。 bin(..)
不将整数转换为二进制等价,int已经存储为二进制。它构造了一个表示( person 可以读取的东西)整数,其中0和1为字符串。事实上:
>>> type(bin(1425))
<class 'str'>
所以你可以简单地使用:
x = int(input("Enter Integer ")) # look ma, no bin(..)
check_bit4(x)
在你的函数中,你写了0b00001000
,但这也是一个整数:如果你直接写8
,那就没有什么区别了。
答案 1 :(得分:0)
嗯,这是因为 bin(x)返回字符串
参考:https://docs.python.org/3/library/functions.html#bin
因此,在上述内容中,您正试图&amp; (和)导致错误的字符串和int
所以我们需要在使用&amp;之前将字符串转换为int。 (和)运营商。
除了这些乏味的任务,我建议你使用&amp; (和)操作员直接输入数字。
def check_bit4(x):
check = 8 #decimal representation of 0b00001000
if x & check: #if condition will be true if the answer is non zero
return("on")
else:
return("off")
x = int(input("Enter Integer "))
print(check_bit4(x))
我希望这能解决你的问题:)