J'ai besoin de convertir une entrée binaire en un entier décimal. Je sais comment passer d'une décimale à une binaire:
n = int(raw_input('enter a number: '))
print '{0:b}'.format(n)
Je dois aller dans le sens inverse. Mon professeur a dit que lorsqu'il vérifierait notre code, il entrerait 11001
et il devrait récupérer 25
. J'ai parcouru nos notes et je ne sais pas comment faire. Google et d'autres ressources Internet n'ont pas beaucoup aidé non plus.
Le plus gros problème est que nous ne sommes pas autorisés à utiliser les fonctions intégrées. Je comprends pourquoi nous ne sommes pas autorisés à les utiliser, mais cela rend ce problème beaucoup plus difficile, étant donné que je sais que Python possède une fonction intégrée allant de binaire à décimal.
Vous pouvez utiliser int
et définir la base sur 2
(pour binaire):
>>> binary = raw_input('enter a number: ')
enter a number: 11001
>>> int(binary, 2)
25
>>>
Cependant, si vous ne pouvez pas utiliser int
comme ça, vous pouvez toujours faire ceci:
binary = raw_input('enter a number: ')
decimal = 0
for digit in binary:
decimal = decimal*2 + int(digit)
print decimal
Ci-dessous une démonstration:
>>> binary = raw_input('enter a number: ')
enter a number: 11001
>>> decimal = 0
>>> for digit in binary:
... decimal = decimal*2 + int(digit)
...
>>> print decimal
25
>>>
Si vous voulez/devez le faire sans int
:
sum(int(c) * (2 ** i) for i, c in enumerate(s[::-1]))
Cela inverse la chaîne (s[::-1]
), récupère chaque caractère c
et son index i
(for i, c in enumerate(
), multiplie le nombre entier du caractère (int(c)
) par deux à la puissance de l'index (2 ** i
), puis les additionne tous (sum()
).
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)
C'est la chose complète
binary = input('enter a number: ')
decimal = 0
for digit in binary:
decimal= decimal*2 + int(digit)
print (decimal)
J'ai commencé à travailler sur ce problème il y a longtemps, en essayant d'écrire ma propre fonction de convertisseur binaire en décimal. Je ne sais pas comment convertir décimal en binaire! Je viens juste de le revoir aujourd'hui et de le comprendre, et c'est ce que j'ai proposé. Je ne sais pas si c'est ce dont vous avez besoin, mais le voici:
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
Encore une fois, j'apprends toujours Python par moi-même, j'espère que cela aidera. La première fonction détermine le nombre de chiffres, la seconde détermine le nombre de chiffres et les renvoie dans une liste. La troisième fonction est la seule que vous devez appeler et calcule la valeur décimale. Si votre professeur voulait réellement que vous écriviez votre propre convertisseur, cela fonctionne, je ne l'ai pas testé avec tous les nombres, mais il semble fonctionner parfaitement! Je suis sûr que vous trouverez tous les insectes pour moi! Donc de toute façon, je l'ai juste appelé comme:
binaryNum = int(input("Enter a binary number: "))
print(binaryToDecimal(binaryNum))
Cela affiche le résultat correct. À votre santé!
L'entrée peut être une chaîne ou un entier.
num = 1000 #or num = '1000'
sum(map(lambda x: x[1]*(2**x[0]), enumerate(map(int, str(num))[::-1])))
# 8
Essayez cette solution:
def binary_int_to_decimal(binary):
n = 0
for d in binary:
n = n * 2 + d
return n