Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将二进制转换为十进制整数输出_Python_Python 2.7_Binary_Integer_Base Conversion - Fatal编程技术网

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")

基于人工智能(线性回归)模型,实际上有一种更快的方法将二进制数转换为十进制数:

  • 训练人工智能算法,将32位二进制数转换为十进制数
  • 从32二进制预测十进制表示
  • 请参见下面的示例和时间比较:

    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)