在Python中,当我通过终端中的raw_input更改变量的值时,它会写一个新行来说明它的新值。我想知道是否有办法避免这种情况,因为在用户输入后直接有一个打印功能,它使用之前收到的值。最后,用户将获得两个值:原始值和修改值,而为了我的程序,他只需要查看修改后的值。
我使用IDLE编写脚本,然后在终端中执行它们。
更新
一个简单的例子如下。输入为字符串“Hello”,输出应为“Me:Hello”。在最终结果之前不应该有“你好”。
a = raw_input()
print ("Me: " + a)
输出应该只是
Me: Hello
而不是
Hello
Me: Hello
答案 0 :(得分:0)
如果您希望用户看到输入,只需将sys.stdout
静音(它有点破解):
>>> from StringIO import StringIO
>>> import sys
>>> orig_out = sys.stdout
>>> print 'give me input: ',
give me input:
>>> sys.stdout = StringIO()
>>> a = raw_input('')
string I type
>>> sys.stdout = orig_out
>>> a
>>> 'string I type'
...如果你把它放到一个函数中那么它就是你想要的!
a.py
....
def foo():
orig_out = sys.stdout
print 'give me input: ',
sys.stdout = StringIO()
a = raw_input()
sys.stdout = orig_out
if __name__ == '__main__':
foo()
运行:
yed@rublan $ ~ python a.py
give me input: something I type!!!!!
yed@rublan $ ~
答案 1 :(得分:0)
您不必做类似困难的事情,答案很简单:
chat_respond="you say: "+input("Write here to respond: ")
#i will suppose that you want to write hello
#That will display:
Write here to respond: hello
因为将自动打印输入,它将显示变量的字符串,但是您在输入之前添加了一些内容,因此它将打印出带有输入的内容
you say: hello
您无需使用困难的库或修改模块,只需在存储输入之前将其添加到变量中,即可:
chat_respond="you say: "
chat_respond+=input("Write here to respond: ")
它会做同样的事情 再见!
答案 2 :(得分:0)
我知道这是一个较晚的答案,但这是Python 2 + 3解决方案(略有改进):
在prompt_demo.py
中:
# coding: utf-8
from __future__ import absolute_import
from __future__ import print_function
import io
import sys
import six.moves
def prompt(msg):
print(msg, end=u'')
orig_out = sys.stdout
try:
sys.stdout = io.StringIO()
return six.moves.input(msg)
finally:
sys.stdout = orig_out
if __name__ == '__main__':
text = prompt(u"Give me input: ")
print(u"Do you mean '{0}'?".format(text))
io.StringIO
,它与Python 2 + 3兼容。six
库向后移植raw_input
函数(在Python 3中已重命名为input
)。try
... finally
解决方案更好:它恢复了sys.stdout
的原始值。我还想指出Click
库中提供的不错的解决方案。这是一个演示:
import click
if __name__ == '__main__':
text = click.prompt(u"Give me input: ", prompt_suffix='')
click.echo(u"Do you mean '{0}'?".format(text))
请参阅有关click.prompt
的文档。