Python 将二进制转换为十进制整数输出
我需要将二进制输入转换成十进制整数。我知道如何从十进制变为二进制:Python 将二进制转换为十进制整数输出,python,python-2.7,binary,integer,base-conversion,Python,Python 2.7,Binary,Integer,Base Conversion,我需要将二进制输入转换成十进制整数。我知道如何从十进制变为二进制: n = int(raw_input('enter a number: ')) print '{0:b}'.format(n) 我需要往相反的方向走。我的教授说,当他检查我们的代码时,他将输入11001,他应该得到25。我看了我们的笔记,不知道怎么做。谷歌和其他互联网资源也没有多大帮助 最大的问题是我们不允许使用内置函数。我理解为什么不允许使用它们,但这使这个问题变得更加困难,因为我知道Python有一个内置的从二进制到十进制的
n = int(raw_input('enter a number: '))
print '{0:b}'.format(n)
我需要往相反的方向走。我的教授说,当他检查我们的代码时,他将输入11001
,他应该得到25
。我看了我们的笔记,不知道怎么做。谷歌和其他互联网资源也没有多大帮助
最大的问题是我们不允许使用内置函数。我理解为什么不允许使用它们,但这使这个问题变得更加困难,因为我知道Python有一个内置的从二进制到十进制的函数。您可以使用并将基数设置为2
(对于二进制):
但是,如果不能像那样使用
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
>>>
如果您想/需要在不使用
int
的情况下执行此操作:
sum(int(c) * (2 ** i) for i, c in enumerate(s[::-1]))
这将反转字符串(
s[:-1]
),获取每个字符c
及其索引i
(对于枚举(
)中的i,c),将字符的整数(int(c)
)乘以2到索引的幂(2**i
),然后将它们全部相加(sum()
).我很久以前就开始研究这个问题,试图编写我自己的二进制到十进制转换函数。但我实际上不知道如何将十进制转换为二进制!我今天只是重新研究了一下,并得出了这个结论。我不确定这是否是您需要的,但这里是:
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,希望这会有所帮助。第一个函数确定有多少位数字,第二个函数实际计算出数字并在列表中返回,第三个函数是您实际需要调用的唯一函数,它计算十进制值。如果您的老师真的希望您o编写您自己的转换器,这是可行的,我没有用每个数字测试它,但它似乎工作得很好!我相信你们都会为我找到错误!所以不管怎样,我只是这样称呼它:
binaryNum = int(input("Enter a binary number: "))
print(binaryToDecimal(binaryNum))
这将打印出正确的结果。干杯!输入可以是字符串或整数
num = 1000 #or num = '1000'
sum(map(lambda x: x[1]*(2**x[0]), enumerate(map(int, str(num))[::-1])))
# 8
这就是全部
binary = input('enter a number: ')
decimal = 0
for digit in binary:
decimal= decimal*2 + int(digit)
print (decimal)
尝试以下解决方案:
def binary_int_to_decimal(binary):
n = 0
for d in binary:
n = n * 2 + d
return n
二进制到十进制
int(binaryString, 2)
十进制到二进制
format(decimal ,"b")
基于人工智能(线性回归)模型,实际上有一种更快的方法将二进制数转换为十进制数:
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)
时间比较:
这个人工智能解决方案转换数字的速度几乎是传统方法的10倍!有人告诉我,他的教授希望他自己编写转换程序,而不是使用现有的函数。请投票选择一个优雅的解决方案,完全按照N0ir所说的。我编辑了这篇文章来澄清这一点。否则,这个问题就容易多了。@iCodez-I尝试了您添加到已编辑文章中的代码。由于某些原因,该代码不起作用?表示该代码的语法无效。(谢谢您的帮助,顺便说一句)@purlinka-Huh,这很奇怪。我的代码的语法很好。你复制正确了吗?另外,请记住,你不能只是将我的演示复制/粘贴到解释器中。你需要将其作为普通脚本运行。请检查。Grace L.Samson的答案可能有用。谢谢你的工作答案@V.Gokul,不过你可以添加一些解释吗对吗?OP@purlinka似乎在理论上与这项任务斗争。基本上对这里发生的事情给出一个解释:
res.append(ar[i]*(2**i))
谢谢!它会将二进制数的每个数字与它们各自的2i值相乘,例如ar[::-1]上的0010->0100和((0)*(20))+((1)*(2**1))+…你有没有想过numpy数组比python列表快得多?当然,你可以使用传统的智能和点积在numpy中惊人地快的事实来做到这一点,但是想一想,如果你现在想转换为base-3甚至base-4(!)表示法?使用常规方法,你需要考虑所有这些正确的系数和乘数,而使用人工智能,它只会帮你完成工作!漂亮!诡辩:这是线性回归,不是逻辑回归,对吗?对,这是一个错误,谢谢!修正了
format(decimal ,"b")
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)