2015-12-04 1 views
1

Я ищу, чтобы создать часы обратного отсчета с помощью Python на Sublime Text 2. Я получил его до точки, где она будет отображаться:Как сделать обратный отсчет времени в Python на Sublime Text 2

01: 00 00:59 00:58 ... 00:00

Однако я хочу, таймер, который будет отображаться только в одном положении, поэтому он выглядит как непрерывный обратный отсчет. Я пробовал множество способов, но не могу заставить строку переписываться в Sublime. Вот код, который я до сих пор:

def countdown(p,q): 
    i=p 
    j=q 
    k=0 
    while True: 
     if(j==-1): 
      j=59 
      i -=1 
     if(j > 9): 
      print(str(k)+str(i)+":"+str(j), end='\r'), 
     else: 
      print(str(k)+str(i)+":"+str(k)+str(j) , end='\r'), 
     time.sleep(1) 
     j -= 1 
     if(i==0 and j==-1): 
      break 
    if(i==0 and j==-1): 
     print("Goodbye!", end="\r") 
     time.sleep(1) 
print(countdown(1,0)) 

ответ

0

Насколько я знаю, sublime не имеет никакого способа, чтобы очистить консоль. Приведенный ниже код отобразит результат, который вам нужен в терминале.

import time,os 
def countdown(p,q): 
    i=p 
    j=q 
    k=0 
    while True: 
     if(j==-1): 
      j=59 
      i -=1 
     if(j > 9): 
      print str(k)+str(i) +":"+str(j), 
     else: 
      print str(k)+str(i)+":"+str(k)+str(j), 
     time.sleep(1) 
     j -= 1 
     if(i==0 and j==-1): 
      break 
     os.system("cls") # or os.system("clear") if on linux 
    if(i==0 and j==-1): 
     os.system("cls") 
     print "Goodbye!", 
     time.sleep(1) 
print countdown(1,0) 

Однако, есть хак данный here. Вы можете использовать print('\n'*100) для эмуляции поведения очистки консоли.

-1

Согласитесь с результатом и печатью каждый раз, когда concat var.

import time                  

def countdown(p,q):                
    i=p                   
    j=q                   
    k=0                   
    a=""                   
    while True:                 
     if(j==-1):                
      j=59                 
      i -=1                
     if(j > 9):                
      a += str(k)+str(i)+":"+str(j) + " "         
     else:                 
      a += str(k)+str(i)+":"+str(k)+str(j) + " "                        
     print (a, end='\r')              
     time.sleep(1)               
     j -= 1                 
     if(i==0 and j==-1):              
      break                
    if(i==0 and j==-1):               
     print("Goodbye!", '\r')             
     time.sleep(1)               
countdown(1,0) 
0

Самый простой способ, о котором я могу думать, состоит в том, чтобы ваш обратный отсчет работал в строке состояния. sublime.status_message() принимает строковый аргумент и отображает его в строке состояния внизу.

Также, вместо использования time.sleep(), попробуйте использовать sublime.set_timeout(). Создайте функцию обратного вызова, которая сокращает время на 1 секунду при каждом вызове. Затем используйте set_timeout(callback, delay=1000), чтобы позвонить ему один раз в секунду (1000 миллисекунд).

Наконец, я настоятельно рекомендую использовать семантические переменные - назовите их в соответствии с тем, что они есть, вместо случайных однобуквенных обозначений. программы Python предназначены, чтобы быть легко читаемыми и понял, и это гораздо проще отлаживать minutes, seconds и counter вместо i, j и k.