it-swarm.com.de

Konvertierung der binären in dezimale Ganzzahlausgabe

Ich muss eine binäre Eingabe in eine dezimale Ganzzahl konvertieren. Ich weiß, wie man von einer Dezimalzahl zu einer Binärdatei wechselt:

n = int(raw_input('enter a number: '))
print '{0:b}'.format(n)

Ich muss in die entgegengesetzte Richtung gehen. Mein Professor sagte, wenn er unseren Code prüft, wird er 11001 eingeben, und er sollte 25 zurückbekommen. Ich habe unsere Notizen durchgesehen und kann nicht herausfinden, wie das geht. Google und andere Internetquellen waren auch keine große Hilfe.

Das größte Problem ist, dass wir keine integrierten Funktionen verwenden dürfen. Ich verstehe, warum wir sie nicht verwenden dürfen, aber das macht dieses Problem sehr viel schwieriger, da ich weiß, dass Python über eine integrierte Funktion für Binär-Dezimal-Funktionen verfügt.

4
purlinka

Sie können int verwenden und die Basis auf 2 (für binär) setzen:

>>> binary = raw_input('enter a number: ')
enter a number: 11001
>>> int(binary, 2)
25
>>>

Wenn Sie int jedoch nicht so verwenden können, können Sie dies immer tun:

binary = raw_input('enter a number: ')
decimal = 0
for digit in binary:
    decimal = decimal*2 + int(digit)
print decimal

Unten ist eine Demonstration:

>>> binary = raw_input('enter a number: ')
enter a number: 11001
>>> decimal = 0
>>> for digit in binary:
...     decimal = decimal*2 + int(digit)
...
>>> print decimal
25
>>>
17
iCodez

Wenn Sie dies ohne int tun wollen/müssen:

sum(int(c) * (2 ** i) for i, c in enumerate(s[::-1]))

Dies kehrt die Zeichenfolge (s[::-1]) um, erhält jedes Zeichen c und seinen Index i (for i, c in enumerate(), multipliziert die ganze Zahl des Zeichens (int(c)) mit zwei zur Potenz des Index (2 ** i) und addiert sie dann alle zusammen (sum()). 

2
jonrsharpe
a = input('Enter a binary number : ')
ar = [int(i) for  i in a]
ar  = ar[::-1]
res = []
for i in range(len(ar)):
    res.append(ar[i]*(2**i))
sum_res = sum(res)      
print('Decimal Number is : ',sum_res)
1
V. Gokul

Das ist die ganze Sache 

binary = input('enter a number: ')
decimal = 0
for digit in binary:
decimal= decimal*2 + int(digit)

print (decimal)
0
Papi Harpy

Ich habe vor langer Zeit damit angefangen, an diesem Problem zu arbeiten und versuchte, meine eigene Binär-Dezimal-Konverterfunktion zu schreiben. Ich weiß nicht, wie ich Dezimal in Binär konvertieren kann! Ich habe es heute gerade noch einmal besucht und habe es herausgefunden. Ich bin mir nicht sicher, ob Sie das brauchen, aber hier ist es:

def __degree(number):
    power = 1

    while number % (10**power) != number:
        power += 1

    return power

def __getDigits(number):
    digits = []
    degree = __degree(number)

    for x in range(0, degree):
        digits.append(int(((number % (10**(degree-x))) - (number % (10**(degree-x-1)))) / (10**(degree-x-1))))
    return digits

def binaryToDecimal(number):
    list = __getDigits(number)
    decimalValue = 0
    for x in range(0, len(list)):
        if (list[x] is 1):
            decimalValue += 2**(len(list) - x - 1)
    return decimalValue

Wieder lerne ich Python immer noch alleine, hoffentlich hilft das. Die erste Funktion bestimmt, wie viele Ziffern es gibt, die zweite Funktion ermittelt sie tatsächlich und gibt sie in einer Liste zurück. Die dritte Funktion ist die einzige, die Sie tatsächlich aufrufen müssen, und berechnet den Dezimalwert. Wenn Ihr Lehrer eigentlich wollte, dass Sie einen eigenen Konverter schreiben, funktioniert das. Ich habe es nicht mit jeder Nummer getestet, aber es scheint perfekt zu funktionieren! Ich bin sicher, dass Sie alle die Fehler für mich finden werden! Also habe ich es einfach so genannt:

binaryNum = int(input("Enter a binary number: "))

print(binaryToDecimal(binaryNum))

Dies gibt das korrekte Ergebnis aus. Prost!

0
MrSheng

Die Eingabe kann ein String oder eine Ganzzahl sein.

num = 1000  #or num = '1000'  
sum(map(lambda x: x[1]*(2**x[0]), enumerate(map(int, str(num))[::-1])))

# 8
0
M. kavin babu

Versuchen Sie diese Lösung:

def binary_int_to_decimal(binary):
n = 0
for d in binary:
    n = n * 2 + d

return n
0