PYTHON - 我得到了一个' str'和' int'使用'输入'

时间:2017-07-22 18:30:58

标签: python string integer bitwise-operators bitwise-and

这个简单的程序检查用户提供的整数中的第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'

2 个答案:

答案 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))

我希望这能解决你的问题:)