蟒蛇:自下而上打印



我有一个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

希望这有帮助。

最新更新