Python binär rechnen?

2 Antworten

Ich fand den Ansatz von AnonYmus19941 sehr cool. Die Umwandlung von X und Y in 1 und 0 übernehme ich mal ganz frech:

rechnung = raw_input('Rechnung eingeben: ').replace('X', '1').replace('Y', '0')
teile = rechnung.split('+')

Danach erhalte ich eine Liste, wobei jedes Element ein String (!) eines Summanden in Binär ist.

Ab hier schlage ich vor, die Funktion int und bin zu verwenden:

Ergebnis = bin(int(teile[0], 2) + int(teile[1], 2))

int() nimmt nämlich nicht nur ein Argument zur Umwandlung in Integer, sondern nimmt auch die Basis, zu der es umgeformt werden soll (im Falle von Binär ist das 2). bin() konvertiert eine Zahl in Binär. Wir vollziehen die Rechnung also als normale Zahl und gehen dann zurück zu binär.

Das Ergebnis ist dann aber auch als binär formatiert, z.B.:

print Ergebnis
>>> 0b1011

Ich kann dir nur ein Grundkonzept liefern:

rechnung = raw_input('Rechnung eingeben: ').replace('X', '1').replace('Y', '0')
teile = rechnung.split('+')
for i in range(len(teile)):
temp = teile[i]
teile[i] = ''
for j in temp:
teile[i] = j + teile[i]
for i in teile:
teile = int(teile, 2)

So bekommst du eine Liste aller Summanden ...

Ich versuche gerade nachzuvollziehen, welchen Lösungsweg zu gehst. "teile" ist ja eine Liste aus Strings. "j in temp" sind also alle Binärzahlen als String ("1" oder "0"). Da "YXX" in Binär "100" übersetzt ist, er aber von links nach rechts iteriert, erhalte ich am Ende deiner Schleife für teile[1] = "001"

In der zweiten Schleife iterierst du nicht über die Listeneinträge, sondern wieder über die einzelnen Binärzahlen als String. Bei int(teile,2) kracht es deshalb.

1
@offeltoffel

Ups, ja, ich habe ein paar Versuche gebraucht und den falschen kopiert ...

Richtig müssten die letzten beiden Zeilen folgendermaßen lauten:

for i in range(len(teile)):
teile[i] = int(teile[i], 2)

Da "YXX" in Binär "100" übersetzt ist, er aber von links nach rechts iteriert, erhalte ich am Ende deiner Schleife für teile[1] = "001".

Laut der Frage sollte die Binärzahl offenbar von hinten nach vorne aufgebaut werden:

2mal Y und 1 mal X (100 )

Daher dreht diese alle Binärzahlen um, sodass aus "YYX" - eigentlich "001" - eine "100" wird.

1
@AnonYmus19941

int(teile[i] ... hatte ich mir noch erschlossen, aber lustigerweise dann aufgehört zu denken. Klar, so funktioniert es auch.

dass YYX = 100 sein soll, halte ich eher für einen Flüchtigkeitsfehler. Aber du hast Recht, wenn man die Frage wörtlich nimmt, müsste man es umdrehen. Und wenn ich so drüber nachdenke, ist es auch sinnvoll, wenn man bedenkt, wie eine Binärzahl aufgebaut wird.

1