input() 与 sys.stdin.read() 的比较
import sys
s1 = input()
s2 = sys.stdin.read(1)
#type "s" for example
s1 == "s" #False
s2 == "s" #True
为什么会这样?我该怎么让 input()
正常工作呢?我试着对 s1
进行编码和解码,但就是不行。
谢谢你。
3 个回答
0
首先,输入就像是 eval(raw_input()),这意味着你传给它的任何东西都会被当作Python表达式来计算。我建议你使用raw_input()来代替。
我测试了你的代码,结果对我来说是一样的:
import sys
s1 = input()
s2 = sys.stdin.read(1)
if s1==s2 and s1=="s":
print "They're both equal s"
这是输出结果:
flaper87@BigMac:/tmp$ python test.py
"s"
s
They're both equal s
使用sys.stdin.read(1)只会从标准输入中读取一个字符,这意味着如果你传入"s",那么只会读取第一个字符"。还有sys.stdin.readline(),它会读取整行内容(包括最后的换行符\n)。
6
你没有说明你使用的是哪个版本的Python,所以我猜你可能是在微软Windows上使用Python 3.2。
这是一个已知的bug,详情可以查看这个链接:http://bugs.python.org/issue11272,标题是“在Windows上,input()有多余的回车符”。
解决这个问题的方法包括:换一个版本的Python,使用不是Windows的操作系统,或者在使用input()
返回的字符串时去掉多余的回车符。你还需要知道,处理标准输入(stdin)时也会遇到同样的问题。
7
如果你在使用Windows系统,你会发现当你输入一个's'然后按回车键时,input()
的结果是"s\r"
。只要把结果末尾的空白字符去掉就没问题了。