2016-05-24 14 views
0

我試圖實現以下目標。我寫了代碼或字符串的值並計算字符串中1的個數。Python字符串到布爾轉換在所有情況下均爲真

a='11001' 
b='00111' 

a and b 
'00111' 

a or b 
11001 

有人可以解釋這是如何工作的。我期待的答案是,當我做a and b,結果應該是00001,當我做a or b,我應該得到​​,邏輯andor

我明白,非空字符串在所有情況下均爲True。所以我可以解釋上述行爲,認爲我不明白如何實現布爾值andor

在此先感謝。

+0

因爲所有非空字符串都是'True'。你正在尋找不會被魔法發生的位操作。你需要明確地執行它們。 – IanAuld

+0

順便說一句,要計算一個由0和1組成的字符串中的'1'的數量,你有一個更簡單的方法:'sum(int(c)for c in「0001111」)' – spectras

+0

@Annapoornima標題對於這個問題是錯誤的和誤導性的,請解決它。問題是關於:表示二進制數字符串的按位操作 – AndresR

回答

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' 

case「or」:

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

and關鍵字不能像你期望的那樣工作。它的功能是:

  1. 評估左側操作數。
  2. 如果該操作數是虛假的(None,False,0,空字符串,...),則返回它。
  3. 否則評估右側操作數並將其返回。

有,'11001'不falsy,因爲它是一個非空字符串,所以'11101' and '00111'返回第二個字符串。

也許你想要做一個按位運算,使用位運算符&

>> 0b11001 & 0b00111 
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 
相關問題