Python:避免使用打印命令换行[重复]

Posted

技术标签:

【中文标题】Python:避免使用打印命令换行[重复]【英文标题】:Python: avoid new line with print command [duplicate] 【发布时间】:2012-07-01 05:42:35 【问题描述】:

我今天开始编程,遇到了 Python 的这个问题。这很愚蠢,但我不知道该怎么做。当我使用 print 命令时,它会打印我想要的任何内容,然后转到另一行。例如:

print "this should be"; print "on the same line"

应该返回:

这应该在同一行

而是返回:

这应该是 在同一行

更准确地说,我正在尝试使用 if 创建一个程序,告诉我一个数字是否是 2

def test2(x):
    if x == 2:
        print "Yeah bro, that's tottaly a two"
    else:
        print "Nope, that is not a two. That is a (x)"

但它不会将最后一个 (x) 识别为输入的值,而是准确地打印:“(x)”(带括号的字母)。为了使它工作,我必须写:

print "Nope, that is not a two. That is a"; print (x)

如果例如我输入test2(3) 给出:

不,那不是二,那是一 3

所以要么我需要让 Python 将打印行中的我的 (x) 识别为数字;或打印两个不同的东西,但在同一行。 在此先感谢您,对于这样一个愚蠢的问题,我们深表歉意。

重要提示:我使用的是2.5.4版

另一个注意事项:如果我输入print "Thing" , print "Thing2",它会在第二次打印时显示“语法错误”。

【问题讨论】:

在行尾添加逗号 (,)。请注意,它仍然会使print 语句打印一个空格而不是换行符。 答案不一样,大多数使用the sys.stdout.write命令(而且它是一个更高级的线程)。由于我今天开始编程,所以我不明白它们。 (我发现了几个非常相似的线程,比如 5,但我不明白或问题不完全相同) 【参考方案1】:

Python 3.x 中,您可以使用 print() 函数的 end 参数来防止打印换行符:

print("Nope, that is not a two. That is a", end="")

Python 2.x 中,您可以使用尾随逗号:

print "this should be",
print "on the same line"

不过,您不需要它来简单地打印变量:

print "Nope, that is not a two. That is a", x

请注意,尾随逗号仍会导致在行尾打印一个空格,即它等同于在 Python 3 中使用 end=" "。要抑制空格字符,您可以使用

from __future__ import print_function

访问 Python 3 打印功能或使用 sys.stdout.write()

【讨论】:

这可以在 Python 3 上使用吗?我在问,因为打印需要括号,并且使用括号和 2.7,这是行不通的。 @octopusgrabbus 它不能在 3.x 上工作,你禁止使用 print('whateverhere', end='') 其中 end 通常默认为 '\n' @Jon Clements 谢谢。我没有使用过 Python 3,但在某处看到了 2.x 之间的一些变化。 两种方式都可以,非常感谢! @octopusgrabbus 您可以使用from __future__ import print_function 自己尝试(我认为)2.6+(可能是 2.7 - 这得到了大部分的后向端口) - 只是期待很多代码休息:)【参考方案2】:

使用尾随逗号来防止出现新行:

print "this should be"; print "on the same line"

应该是:

print "this should be", "on the same line"

此外,您可以通过以下方式将传递的变量附加到所需字符串的末尾:

print "Nope, that is not a two. That is a", x

你也可以使用:

print "Nope, that is not a two. That is a %d" % x #assuming x is always an int

您可以使用% 运算符(取模)访问有关字符串格式的其他documentation。

【讨论】:

谢谢,你也猜对了。【参考方案3】:

您只需要这样做:

print 'lakjdfljsdf', # trailing comma

但是在:

print 'lkajdlfjasd', 'ljkadfljasf'

有隐含的空格(即' ')。

您还可以选择:

import sys
sys.stdout.write('some data here without a new line')

【讨论】:

导入系统; sys.stdout.write 方法的优点是在 Python 2.x 和 Python 3.x 上保持不变。 import sys sys.stdout.write('some data here without a new line') 这根本没有输出,我不明白 sys.stdout.write... @Javicobos 因为你必须在之后sys.stdout.flush()sys.stdout 是一个缓冲流...恰好 print 语句隐式调用了刷新。 为了使它更清晰,some_file_like_object.write() 写入缓冲区。缓冲区仅在已满或刷新或关闭时写入。 stdin 和 stdout 被缓冲,但 stderr 不是。 print 基本上就是sys.stdout.write('lkjsflajfsd\n')【参考方案4】:

Python 2.x 中,只需在 print 语句的末尾添加一个 ,。如果您想避免print 在项目之间放置空格,请使用sys.stdout.write

import sys

sys.stdout.write('hi there')
sys.stdout.write('Bob here.')

产量:

hi thereBob here.

请注意,两个字符串之间没有换行符空格

Python 3.x 中,带有print() function,你可以说

print('this is a string', end="")
print(' and this is on the same line')

然后得到:

this is a string and this is on the same line

还有一个名为 sep 的参数,您可以使用 Python 3.x 在 print 中设置它来控制相邻字符串的分隔方式(或不取决于分配给 sep 的值)

例如,

Python 2.x

print 'hi', 'there'

给予

hi there

Python 3.x

print('hi', 'there', sep='')

给予

hithere

【讨论】:

sys.stdout.write 工作异常。我不知道它的语法,你能给我一个简单的 sys.stdout.write 命令及其输出的例子吗? import sys sys.stdout.write('hi there') sys.stdout.write('Bob here.') 我将它复制粘贴到我的 python 中,当我按 Enter 时它绝对没有输出。这只能在 def function() 或其他东西中使用吗? @Javicobos 尝试添加这个sys.stdout.flush() .. 也许你的 IO 没有被刷新。 现在工作,我需要先输入:import sys(按回车键),然后是 write.stdout.sys 的东西。非常感谢!【参考方案5】:

如果您使用的是 Python 2.5,这将不起作用,但对于使用 2.6 或 2.7 的人,请尝试

from __future__ import print_function

print("abcd", end='')
print("efg")

结果

abcdefg

对于那些使用 3.x 的用户,这已经是内置的了。

【讨论】:

太棒了!这对于编写兼容两个版本的代码非常有用,并且在 python 2 和 python 3 下都会给出相同的结果!

以上是关于Python:避免使用打印命令换行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥这会重复打印换行符?

Python在意想不到的地方添加换行符[重复]

python中怎么换行?

Python 打印和文本换行

secureCRT输入命令会重复显示和重复换行,怎么解决

避免在textarea中换行[重复]