如何防止input函数插入换行?
我知道我可以通过加一个逗号来让打印的时候不换行。
print "Hello, world!",
# print("Hello, world!", end='') for Python 3.x
但是我该怎么做才能让 raw_input
(或者在Python 3.x中用的 input
)不换行呢?
print "Hello, ",
name = raw_input()
print ", how do you do?"
结果:
Hello, Tomas
, how do you do?
我想要的结果:
Hello, Tomas, how do you do?
9 个回答
10
这样做可以在一定程度上绕过这个问题,但并没有给变量 name
赋值:
print("Hello, {0}, how do you do?".format(raw_input("Enter name here: ")))
不过,它会在打印完整消息之前,先让用户输入一个名字。
13
我看到没有人提供一个有效的解决方案,所以我决定试试看。正如Ferdinand Beyer所说,raw_input()
后面总会自动换行,这个是没办法避免的。不过,我们可以回到之前的那一行。
我把这个方法简化成了一行代码,你可以使用:
print '\033[{}C\033[1A'.format(len(x) + y),
这里的x
是用户输入的长度,y
是raw_input()
返回字符串的长度。虽然我听说这个方法在所有终端上可能不适用,但在我的终端上是可以正常工作的,我用的是Kubuntu 14.04。
字符串'\033[4C'
的作用是向右移动4个字符,相当于' ' * 4
。同样,字符串'\033[1A'
则是向上移动1行。通过在字符串的最后加上字母A
、B
、C
或D
,你可以分别向上、向下、向右和向左移动。
需要注意的是,向上一行会删除那个位置上已经打印的字符(如果有的话)。
12
但是我怎么才能让raw_input不输出换行符呢?
简单来说:你不能。
raw_input()
这个函数总是会把用户输入的内容显示出来,包括最后的换行符。这意味着用户输入的任何内容都会被打印到屏幕上。
如果你想阻止这种情况发生,你需要使用一个叫做终端控制库的东西,比如curses
模块。不过,这个方法并不适用于所有系统,比如在Windows上就用不了curses
。