所有情况下,Python String to Bool转换的结果为True

时间:2016-05-24 07:09:35

标签: python string boolean

我试图实现以下目标。我编写了代码或字符串的值,并计算字符串中的1的数量。

a='11001'
b='00111'

a and b
'00111'

a or b
11001

有人可以解释一下这是如何运作的。我期待的答案是,当我a and b时,结果应为00001,当我a or b时,我应该11111,逻辑{{1} }和and

我确实理解非空字符串在所有情况下都会产生True。所以我可以解释上面的行为,以为我不明白如何实现布尔orand

提前致谢。

3 个答案:

答案 0 :(得分:1)

and关键字无法正常运行。它的作用是:

  1. 评估左手操作数。
  2. 如果该操作数是假的(NoneFalse,0,空字符串,...)则返回它。
  3. 否则评估右手操作数并将其返回。
  4. 在那里,'11001'不是假的,因为它是一个非空字符串,所以'11101' and '00111'返回第二个字符串。

    也许你想使用按位和运算符&进行按位运算?

    >> 0b11001 & 0b00111
    1
    

答案 1 :(得分:1)

andor个关键字适用于布尔值。 python中的非空字符串是True

如果要执行位操作,可以使用以下内容:

>>> a='11001'
>>> b='00111'
>>> bin(int(a, 2) & int(b, 2))
'0b1'
>>> bin(int(a, 2) | int(b, 2))
'0b11111'

要计算或结果中1的数量,您可以使用count()函数:

>>> bin(int(a, 2) | int(b, 2))[2:]
'11111'
>>> bin(int(a, 2) | int(b, 2))[2:].count('1')
5

答案 2 :(得分:1)

a='11001'
b='00111'
c = ''

案例"和":

for bit_1, bit_2 in zip(a, b):
    if bit_1 == bit_2:
        c += '1'
    else:
        c += '0'

案例"或":

for bit_1, bit_2 in zip(a, b):
    if bit_1 == '1' or bit_2 == '1':
        c += '1'
    else:
        c += '0'