我用Python编写了这段代码
inputted = input("Enter in something: ")
print("Input is {0}, including the return".format(inputted))
输出
Enter in something: something
Input is something
, including the return
我不确定发生了什么;如果我使用不依赖于用户输入的变量,那么在用变量格式化之后,就不会得到换行符。我怀疑当我点击return时,Python可能会把换行作为输入。
如何使输入不包含任何换行符,以便与其他字符串/字符进行比较?(例如something == 'a'
)
您是正确的-新行包含在
inputted
中。要删除它,只需调用strip("\r\n")
从结尾删除换行符:如果
inputted
的结尾没有换行符,但将删除其中的任何换行符,则这不会导致任何问题,因此无论inputted
是否为用户输入,都可以使用它。如果根本不希望文本中有任何新行,可以使用
inputted.replace("\r\n", "")
删除所有新行。你的问题实际上是日食。假设你使用PyDev,我就可以重现这个问题。在Eclipse控制台中输入某些内容时,会出现问题中描述的问题。但是,当使用Python 3.1.1解释器直接执行同一脚本时,
inputted
不包含换行符。我调查了Python源代码,发现如果stdin是交互式的(即TTY或prompt,但是您想调用它),那么,但如果需要,可以返回到stdin对象的
input()
使用GNU readline.readline()
方法。然后,如果readline
的结果以\n
结尾,则删除该字符。注意:这里没有CR-LF或LF-CR处理(在后备情况下)!所以我写了这个小剧本来看看到底发生了什么:
它首先使用标准stdin(控制台或Eclipse控制台)执行代码,然后使用包含文本
test\r\ntest\r\n
的准备好的stdin执行代码。尝试在Eclipse中运行脚本-必须输入两次字符串。结论是:在Eclipse控制台中按Enter将生成CR-LF(“\r\n”)。在Eclipse控制台中打印“\r”将跳转到下一行。
另一方面,在Windows控制台中运行它将产生预期的输出:
input()
返回一个字符串,结尾没有换行符,因为(我猜)使用了GNU readline。使用准备好的stdinStringIO("test\r\n")
,结果是Eclipse中的“test\r”(尽管没有打印为换行符)。希望这一切都有意义。。。但我仍然不知道这是否是Eclipse的预期行为。
如果只想删除最后一行的结尾,可以使用rstrip。
inputted.rstrip ("\r\n")
相关问题 更多 >
编程相关推荐