2013-05-31 46 views
4

我有以下代碼片段,我從stdin中取整數n,將其轉換爲二進制,反轉二進制字符串,然後轉換回整數並輸出它。在Python中讀取stdin中的整數

import sys 

def reversebinary(): 
    n = str(raw_input()) 
    bin_n = bin(n)[2:] 
    revbin = "".join(list(reversed(bin_n))) 
    return int(str(revbin),2) 

reversebinary() 

不過,我得到這個錯誤:

Traceback (most recent call last): 
File "reversebinary.py", line 18, in <module> 
    reversebinary() 
File "reversebinary.py", line 14, in reversebinary 
    bin_n = bin(n)[2:] 
TypeError: 'str' object cannot be interpreted as an index 

我不能確定是什麼問題。

回答

7

你傳入一個字符串bin()功能:

>>> bin('10') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'str' object cannot be interpreted as an index 

給它,而不是一個整數

>>> bin(10) 
'0b1010' 

轉動raw_input()結果int()

n = int(raw_input()) 

提示:通過給它一個字符串,你可以輕鬆地反轉字符串負切片步幅:

>>> 'forward'[::-1] 
'drawrof' 

,所以你可以簡化你的函數:

def reversebinary(): 
    n = int(raw_input()) 
    bin_n = bin(n)[2:] 
    revbin = bin_n[::-1] 
    return int(revbin, 2) 

甚至:

def reversebinary(): 
    n = int(raw_input()) 
    return int(bin(n)[:1:-1], 2) 
3

你要輸入轉換爲整數的字符串 - 這是已經是字符串了。所以這條線:

n = str(raw_input()) 

應該是這樣的:

n = int(raw_input()) 
1

這是原始輸入,即一個字符串,但你需要一個int:

bin_n = bin(int(n)) 
0

bin需要整數作爲參數並且您在此處放置字符串,則必須將其轉換爲整數:

import sys 

def reversebinary(): 
    n = int(raw_input()) 
    bin_n = bin(n)[2:] 
    revbin = "".join(list(reversed(bin_n))) 
    return int(str(revbin),2) 

reversebinary()