2014-12-04 8 views
-1

У меня есть код в python, и мне нужно распечатать 3 результата, первый внизу, третий сверху.Python: печать снизу вверх

Терминал будет печатать в следующем порядке:

первый (пауза) второй (пауза) третий

Я хотел бы напечатать в таком порядке, а не (будет пауза между выход):

... третий

... вторая (пауза)

первого для печати (затем паузы)

для того, чтобы смоделировать, я использую эту последовательность оператора печати:

from time import sleep 

print '1' 
sleep(1) 
print '2' 
print '1' 
sleep(1) 
print '3' 
print '2' 
print '1' 

Это снизу вверх печать должна быть только используется специально для этого выхода 3 линии а не во всем мире. Возможно ли это? Спасибо

UPDATE: Кажется, что единственной библиотекой, которую я могу эффективно использовать для изменения порядка новой строки терминала, является проклятие. Я попробую. Спасибо.

+0

Да - это возможно - просто распечатайте выходные данные в обратном порядке для этих результатов - python не знает, какой результат в любом случае, поэтому он не контролирует порядок, в котором вы их печатаете - ваш код делает. –

+0

Извините, я был, вероятно, неясен: мне нужно, чтобы они появлялись на терминале в этом положении и порядке. –

+0

см. Мой ответ, который даст понять, что ваша программа управляет порядком вывода. –

ответ

1

Я думаю, что вы хотите «перезаписать» выходные данные для каждого последующего запуска. Если символ перевода строки не трудно ограничение, вы можете сделать что-то вроде этого:

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, подождите секунду, перезаписать 1 с 2,1, ждать второй, а затем перезаписать 2,1 с 3,2,1 , подождите секунду и выйдите.

Интересной частью является использование \r в выходной строке - это Unix carriage return, что приводит к тому, что указатель файла stdout в терминалах перемещается в крайнее левое положение. Теперь, когда указатель находится в самом левом положении, мы затем печатаем следующий набор символов, по сути перезаписывающий предыдущий вывод.

Я использую sys.stdout.write, чтобы избежать неявной новой строки или пространства, которое добавляет print.range записывается таким образом, чтобы создать обратный список чисел для печати. Флеш необходим, чтобы заставить персонажей быть сброшенными на выход.

Это работает только в том случае, если выход находится на одной линии - многострочные выходы, как в вашем примере, не будут работать с этим методом. Если вы должны иметь многострочные выходы, то ваша библиотека будет curses.

+0

К сожалению, новая строка является жестким ограничением. Это очень интересный ответ. –

1

Примеры:

results = ["1","2","3"] 

    print "\n".join(results) 

    1 
    2 
    3 

    print "\n".join(results[::-1]) 
    3 
    2 
    1 
+0

, пожалуйста, примите этот ответ, если он вам поможет. –

+0

Прошу прощения, это не то, что я ищу, я хочу, чтобы линия появилась снизу и после короткой паузы сверху. Я понял, что сообщение не ясное, я его отредактировал. Я добавляю код. –

+0

, поэтому вам нужно использовать оконный менеджер, например, проклятия, или поиграть с помощью escape-кодов (удачи) –

0

Да, это возможно. Пожалуйста, напишите любой код, который вы застряли, чтобы люди могли быстрее помочь вам. Вы можете использовать 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 

Надеется, что это помогает.

Смежные вопросы