2014-02-13 54 views
4

我需要將二進制輸入轉換爲十進制整數。我知道如何從十進制到二進制:將二進制轉換爲十進制整數輸出

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

我需要去相反的方向。我的教授說,當他檢查我們的代碼時,他將輸入11001,他應該得到25回來。我瀏覽了我們的筆記,我無法弄清楚如何做到這一點。谷歌和其他互聯網資源也沒有太大的幫助。

最大的問題是我們不允許使用內置函數。我明白爲什麼我們不允許使用它們,但是這使得這個問題變得更加困難,因爲我知道Python有一個二進制到十進制的內置函數。

+0

檢查[這](https://開頭計算器。com/questions/35450560/how-to-use-python-to-convert-an-octal-to-a -id/47823029)#47823029。 Grace L. Samson的回答可能很有用 –

回答

14

您可以使用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 
>>> 
+0

某事告訴我他的教授想要他自己寫這個轉換器,而不是使用現有的函數。 Upvote的優雅的解決方案,雖然 – OutFall

+0

究竟是N0ir說。我編輯帖子澄清。否則,這個問題會容易得多。 – purlinka

+0

@iCodez - 我試過你添加到你編輯的文章中的代碼。由於某種原因,它不起作用?說這是無效的語法。 (感謝您的幫助,順便說一句) – purlinka

2

如果你想/需要做沒有int

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

此反轉字符串(s[::-1]),獲取每個字符c及其指數ifor i, c in enumerate(),乘以字符的整數(int(c) )減去指數(2 ** i)的兩次,然後將它們全部加在一起(sum())。

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

這打印出正確的結果。乾杯!

0

輸入可能是字符串或整數。

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

# 8 
0

這是一個完整的東西

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

print (decimal) 
相關問題