Ich musste Binär zu Dezimal konvertieren und ich fand diesen Code hier, es funktioniert perfekt:
binary_Op1 = raw_input("enter a number: ")
decimal = 0
for digit in binary_Op1:
decimal = decimal*2 + int(digit)
print decimal
Die Sache ist, ich habe Schwierigkeitendie Logik dahinter verstehen ... Warum multiplizieren wir die dezimale Variable mit 2? Warum ist die Dezimalvariable auf = 0 gesetzt? Warum haben wir jedes Mal die Ziffer? und so weiter(:
Vielen Dank.
Antworten:
2 für die Antwort № 1Lassen Sie mich das am Beispiel von 10101 erläutern.
1 should be multiplied by 2^4
0 should be multiplied by 2^3
1 should be multiplied by 2^2
0 should be multiplied by 2^1
1 should be multiplied by 2^0
and Add everything.
Das Programm beginnt mit der Multiplikation von 2 jedes Mal, wenn es auf eine Zahl trifft. Also wird zuerst die erste 1 4-mal und die erste 0 3-mal und die selbe bis zur letzten 1 multipliziert.
Etwas wie das.
1 *2 *2 *2 *2
0 *2 *2 *2
1 *2 *2
0 *2
1
1 für die Antwort № 2
Es ist weniger eine Programmierfrage als eine mathematische Frage.
Versuchen Sie ein Beispiel: 1100101
decimal = 0
# First digit: 1
decimal = decimal*2 + int(digit) # decimal = 0*2 + 1 = 1
# Second digit: 1
decimal = decimal*2 + int(digit) # decimal = 1*2 + 1 = 3
# Third digit: 0
decimal = decimal*2 + int(digit) # decimal = 3*2 + 0 = 6
# Fourth digit: 0
decimal = decimal*2 + int(digit) # decimal = 6*2 + 0 = 12
# Fifth digit: 1
decimal = decimal*2 + int(digit) # decimal = 12*2 + 1 = 25
# Sixth digit: 0
decimal = decimal*2 + int(digit) # decimal = 25*2 + 0 = 50
# Seventh digit: 1
decimal = decimal*2 + int(digit) # decimal = 50*2 + 1 = 101
Voilá! Antwort ist 101.
Es funktioniert, indem jeder verdoppelt wird 1
so oft wie Ziffern folgen. Auf diese Weise erhalten höherwertige Stellen tatsächlich einen höheren Wert (1,2,4,8,16,32 ...)
Dies funktioniert auch für das Dezimalsystem:
Versuchen: 1337
decimal = 0
# First digit: 1
decimal = decimal*10 + digit # decimal = 0*10 + 1 = 1
# Second digit: 3
decimal = decimal*10 + digit # decimal = 1*10 + 3 = 13
# Third digit: 3
decimal = decimal*10 + digit # decimal = 13*10 + 3 = 133
# Fourth digit: 7
decimal = decimal*10 + digit # decimal = 133*10 + 7 = 1337
Voilá! Die Antwort ist 1337.
Nachtrag: Das Horners Methode verwendet das gleiche Prinzip, um Polynome an einem gegebenen Punkt auszuwerten.