[英]Reading in integer from stdin in Python
I have the following piece of code where I take in an integer n from stdin, convert it to binary, reverse the binary string, then convert back to integer and output it.我有以下一段代码,我从 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()
However, I'm getting this error:但是,我收到此错误:
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
I'm unsure what the problem is.我不确定问题是什么。
You are passing a string to the bin()
function:您正在将字符串传递给
bin()
函数:
>>> bin('10')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object cannot be interpreted as an index
Give it a integer instead:给它一个整数:
>>> bin(10)
'0b1010'
by turning the raw_input()
result to int()
:通过将
raw_input()
结果转换为int()
:
n = int(raw_input())
Tip: you can easily reverse a string by giving it a negative slice stride:提示:您可以通过给它一个负切片步幅来轻松反转字符串:
>>> 'forward'[::-1]
'drawrof'
so you can simplify your function to:因此您可以将您的功能简化为:
def reversebinary():
n = int(raw_input())
bin_n = bin(n)[2:]
revbin = bin_n[::-1]
return int(revbin, 2)
or even:甚至:
def reversebinary():
n = int(raw_input())
return int(bin(n)[:1:-1], 2)
You want to convert the input to an integer not a string - it's already a string.您想将输入转换为整数而不是字符串 - 它已经是字符串。 So this line:
所以这一行:
n = str(raw_input())
should be something like this:应该是这样的:
n = int(raw_input())
它是原始输入,即一个字符串,但您需要一个 int:
bin_n = bin(int(n))
bin
takes integer as parameter and you are putting string there, you must convert to integer: 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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.