import sys
s1 = input()
s2 = sys.stdin.read(1)
#type "s" for example
s1 == "s" #False
s2 == "s" #True
为什么呢?如何让input()
正常工作?
我尝试编码/解码s1
,但它不起作用。
谢谢。
答案 0 :(得分:7)
如果你在Windows上,当你输入's'并输入input()
时,你会注意到"s\r"
的结果。{{1}}。从结果中删除所有尾随空格,你会没事的。
答案 1 :(得分:6)
您没有说明您使用的是哪个版本的Python,因此我猜您使用的是在Microsoft Windows上运行的Python 3.2。
这是一个已知的错误,请参阅http://bugs.python.org/issue11272“input()在Windows上有回车符”
变通办法包括使用不同版本的Python,使用非Windows操作系统,或者从input()
返回的任何字符串()中删除尾随回车。您还应该知道,对stdin进行迭代会遇到同样的问题。
答案 2 :(得分:0)
首先,输入类似于eval(raw_input()),这意味着您传递给它的所有内容都将被视为python expresion。我建议你改用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)将只读取stdin中的1个字符,这意味着如果你传递“s”只是第一个“将被读取。有sys.stdin.readline()读取整行(包括最后的\ n)。