从标准输入中读取整数的Python代码

8
我有以下一段代码,从标准输入中接收一个整数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个回答

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)

5

你希望将输入转换为整数而不是字符串——它已经是一个字符串了。所以这一行代码:

n = str(raw_input())

应该像这样:

应该是这个样子的:

n = int(raw_input())

1

这是原始输入,即字符串,但你需要一个整数:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接