如何防止input函数插入换行?

24 投票
9 回答
62051 浏览
提问于 2025-04-17 00:15

我知道我可以通过加一个逗号来让打印的时候不换行。

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是用户输入的长度,yraw_input()返回字符串的长度。虽然我听说这个方法在所有终端上可能不适用,但在我的终端上是可以正常工作的,我用的是Kubuntu 14.04。
字符串'\033[4C'的作用是向右移动4个字符,相当于' ' * 4。同样,字符串'\033[1A'则是向上移动1行。通过在字符串的最后加上字母ABCD,你可以分别向上、向下、向右和向左移动。

需要注意的是,向上一行会删除那个位置上已经打印的字符(如果有的话)。

12

但是我怎么才能让raw_input不输出换行符呢?

简单来说:你不能。

raw_input()这个函数总是会把用户输入的内容显示出来,包括最后的换行符。这意味着用户输入的任何内容都会被打印到屏幕上。

如果你想阻止这种情况发生,你需要使用一个叫做终端控制库的东西,比如curses模块。不过,这个方法并不适用于所有系统,比如在Windows上就用不了curses

撰写回答