我有一个python代码,我需要打印3个结果,第一个在底部,第三个在顶部。
终端将按以下顺序打印:
第一(暂停(第二(暂停(第三
我想按此顺序打印(输出之间会有一个暂停(:
。第三
。第二个(暂停(
首先打印(然后暂停(
为了模拟这一点,我正在使用以下打印语句序列:
from time import sleep
print '1'
sleep(1)
print '2'
print '1'
sleep(1)
print '3'
print '2'
print '1'
此自下而上的打印应仅用于此 3 行输出,而不是全局用于所有输出。这可能吗?谢谢
更新:似乎我唯一可以有效用于修改终端换行顺序的库是curses。我会试一试。谢谢。
我认为您想"覆盖"每次连续运行的打印输出。如果换行符不是硬约束,则可以执行以下操作:
import sys
import time
for i in range(3):
sys.stdout.write('r' + ','.join([str(a) for a in range(i+1, 0, -1)]))
sys.stdout.flush()
time.sleep(1)
sys.stdout.write('n')
这将首先打印1
,等待一秒钟,用2,1
覆盖1
,等待一秒钟,然后用3,2,1
覆盖2,1
,等待一秒钟并退出。
有趣的部分是在输出字符串中使用r
- 这是Unix carriage return
,它导致终端中的标准输出文件指针移动到最左侧的位置。现在指针位于最左侧的位置,然后我们打印下一组字符,实际上覆盖了上一个输出。
我使用 sys.stdout.write
来避免print
添加的隐式换行符或空格。以这种方式编写range
以生成要打印的数字的反向列表。需要刷新才能强制将字符刷新到输出。
这仅在输出在单行上时才有效 - 示例中的多行输出不适用于此方法。如果你必须有多行输出,诅咒库是你最好的选择。
示例:
results = ["1","2","3"]
print "n".join(results)
1
2
3
print "n".join(results[::-1])
3
2
1
是的,这是可能的。请发布您遇到的任何代码,以便人们可以更快地帮助您。您可以使用 reversed()
,一个内置的 python 来反转您尝试打印的任何可迭代对象。
例如:
list = ['1', '2', '3']
for item in list:
print item
# You get
# 1
# 2
# 3
现在,如果您只想反转此打印顺序,则可以执行以下操作:
for item in reversed(list):
print item
# You get
# 3
# 2
# 1
希望这有帮助。