2016-05-24 6 views
0

Ich habe versucht, das folgende zu erreichen. Ich schrieb Code auf oder die Werte einer Zeichenkette und zähle die Anzahl der 1en in der Zeichenkette.Python String zu Bool Konvertierung ergibt True für alle Fälle

a='11001' 
b='00111' 

a and b 
'00111' 

a or b 
11001 

Kann jemand erklären, wie das funktioniert. Die Antwort, die ich erwarte ist, dass, wenn ich a and b mache, das Ergebnis 00001 sein sollte und wenn ich a or b mache, sollte ich 11111, die logische and und or bekommen.

Ich verstehe, dass nicht leere Zeichenfolgen für alle Fälle True ergeben. So kann ich das obige Verhalten erklären, dachte ich nicht, wie man boolean implementieren and und or

Vielen Dank im Voraus.

+0

Da alle nicht leeren Strings "True" sind. Sie suchen nach bitweisen Operationen, die nicht durch Magie geschehen. Sie müssen sie explizit ausführen. – IanAuld

+0

Übrigens, um die Anzahl von '1' in einem String aus nur 0 und 1s zu zählen, haben Sie einen viel einfacheren Weg: 'sum (int (c) für c in" 0001111 ")' – spectras

+0

@Annapoornima Der Titel Für diese Frage ist falsch und irreführend, bitte beheben Sie es. Die Frage ist: Bitweise Operationen an Strings, die Binärzahlen darstellen – AndresR

Antwort

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

Fall "und":

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

Fall "oder":

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

Das Schlüsselwort and funktioniert nicht wie erwartet. Was es tut ist:

  1. bewerten Sie den linken Operanden. Wenn dieser Operand falsch ist (None, False, 0, leere Zeichenfolge, ...), dann geben Sie ihn zurück.
  2. ansonsten den rechten Operanden auswerten und zurückgeben.

Dort '11001' ist nicht falsy, da es eine nicht leere Zeichenfolge ist so '11101' and '00111' gibt die zweite Saite.

Vielleicht wollten Sie eine bitweise Operation mit dem bitweisen Operator &?

>> 0b11001 & 0b00111 
1 
1

and und or Schlüsselwörter arbeiten auf Boolesche Werte. Eine nicht leere Zeichenfolge ist True in Python.

Wenn Sie Bit-Operationen ausführen möchten, können Sie so etwas wie dieses verwenden:

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

und die Anzahl von 1en in dem oder Ergebnis zu zählen, können Sie die count() Funktion:

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