8

次のコードは、stdin から整数 n を取得し、それをバイナリに変換し、バイナリ文字列を反転してから、整数に変換して出力します。

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

何が問題なのかわからない。

4

4 に答える 4

9

関数に文字列を渡してい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)
于 2013-05-31T23:30:41.757 に答える
4

入力を文字列ではなく整数に変換したい - それはすでに文字列です。したがって、この行:

n = str(raw_input())

次のようになります。

n = int(raw_input())
于 2013-05-31T23:30:42.317 に答える
1

これは生の入力、つまり文字列ですが、int が必要です。

bin_n = bin(int(n))
于 2013-05-31T23:32:04.527 に答える
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()
于 2013-05-31T23:35:47.533 に答える