我需要将二进制输入转换为十进制整数。我知道如何从十进制到二进制:
n = int(raw_input('enter a number: '))
print '{0:b}'.format(n)
我需要反方向。我的教授说,当他检查我们的代码时,他将输入11001
,他应该得到25
。我查看了我们的笔记,但我无法弄清楚如何做到这一点。谷歌和其他互联网资源也没有多大帮助。
最大的问题是我们不允许使用内置函数。我理解为什么我们不被允许使用它们,但它使这个问题变得更加困难,因为我知道Python有一个二进制到十进制的内置函数。
答案 0 :(得分:17)
您可以使用int
并将基数设置为2
(对于二进制):
>>> binary = raw_input('enter a number: ')
enter a number: 11001
>>> int(binary, 2)
25
>>>
但是,如果您不能像这样使用int
,那么您可以随时执行此操作:
binary = raw_input('enter a number: ')
decimal = 0
for digit in binary:
decimal = decimal*2 + int(digit)
print decimal
以下是演示:
>>> binary = raw_input('enter a number: ')
enter a number: 11001
>>> decimal = 0
>>> for digit in binary:
... decimal = decimal*2 + int(digit)
...
>>> print decimal
25
>>>
答案 1 :(得分:2)
如果您希望/需要在没有int
的情况下执行此操作:
sum(int(c) * (2 ** i) for i, c in enumerate(s[::-1]))
这会反转字符串(s[::-1]
),获取每个字符c
及其索引i
(for i, c in enumerate(
),乘以字符的整数({{1} })两个索引的幂(int(c)
)然后将它们全部加在一起(2 ** i
)。
答案 2 :(得分:1)
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)
答案 3 :(得分:1)
二进制到十进制
int(binaryString, 2)
十进制转换为二进制
format(decimal ,"b")
答案 4 :(得分:0)
我很久以前就开始研究这个问题,试图将自己的二进制编写成十进制转换函数。我实际上并不知道如何将十进制转换为二进制!我今天刚刚重新审视它,并想出来,这就是我想出来的。我不确定这是否是您所需要的,但现在是:
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
同样,我仍然只是靠自己学习Python,希望这会有所帮助。第一个函数确定有多少位数,第二个函数实际计算出它们并将它们返回到列表中,第三个函数是您实际需要调用的唯一函数,它计算十进制值。如果你的老师真的想要你自己编写转换器,这个有效,我还没有对每个数字进行测试,但它似乎完美无缺!我相信你们都会找到我的错误!所以无论如何,我只是称之为:
binaryNum = int(input("Enter a binary number: "))
print(binaryToDecimal(binaryNum))
这会打印出正确的结果。干杯!
答案 5 :(得分:0)
输入可以是字符串或整数。
num = 1000 #or num = '1000'
sum(map(lambda x: x[1]*(2**x[0]), enumerate(map(int, str(num))[::-1])))
# 8
答案 6 :(得分:0)
这是完整的事情
binary = input('enter a number: ')
decimal = 0
for digit in binary:
decimal= decimal*2 + int(digit)
print (decimal)
答案 7 :(得分:0)
尝试以下解决方案:
def binary_int_to_decimal(binary):
n = 0
for d in binary:
n = n * 2 + d
return n
答案 8 :(得分:0)
实际上,有一种基于人工智能(逻辑回归)模型的将二进制数转换为十进制的更快的方法:
请参见下面的示例和时间比较:
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import numpy as np
y = np.random.randint(0, 2**32, size=10_000)
def gen_x(y):
_x = bin(y)[2:]
n = 32 - len(_x)
return [int(sym) for sym in '0'*n + _x]
X = np.array([gen_x(x) for x in y])
model = LinearRegression()
model.fit(X, y)
def convert_bin_to_dec_ai(array):
return model.predict(array)
y_pred = convert_bin_to_dec_ai(X)
时间比较:
此AI解决方案转换数字的速度几乎是传统方法的x10倍!