Часы обратного отсчета: 01:05

Как я могу создать часы обратного отсчета в Python, которые выглядят как 00:00 (мин и сек), которые находятся в отдельной строке. Каждый раз, когда он уменьшается на одну фактическую секунду, старый таймер должен быть заменен в своей строке новым таймером, который на одну секунду меньше: 01:00 становится 00:59, и он фактически достигает 00:00.

Вот базовый таймер, с которого я начал, но хочу преобразовать:

def countdown(t):
    import time
    print('This window will remain open for 3 more seconds...')
    while t >= 0:
        print(t, end='...')
        time.sleep(1)
        t -= 1
    print('Goodbye! \n \n \n \n \n')

t=3

Я также хочу убедиться, что все после Goodbye! (что, скорее всего, будет вне функции) будет на отдельной строке.

РЕЗУЛЬТАТ: 3...2...1...0...Goodbye!

Я знаю, что это похоже на другие вопросы обратного отсчета, но я считаю, что у него есть своя изюминка.


person trevor4n    schedule 07.08.2014    source источник
comment
Вы хотите в формате MM:SS или просто 3...2...1? Вы упомянули оба.   -  person TheSoundDefense    schedule 07.08.2014
comment
Я хочу это в MM:SS, но я просто показывал, что я начал с @TheSoundDefense.   -  person trevor4n    schedule 07.08.2014
comment
3...2...1...0...Goodbye! появится все вместе в конце цикла.‹br›используйте flush для принудительной печати, не дожидаясь \r или \n: sys.stdout.write(str(t)+'...') sys.stdout.flush()   -  person luney    schedule 02.06.2019


Ответы (5)


Помимо форматирования времени в виде минут и секунд, вам нужно будет напечатать возврат каретки. Установите end на \r:

import time

def countdown(t):
    while t:
        mins, secs = divmod(t, 60)
        timeformat = '{:02d}:{:02d}'.format(mins, secs)
        print(timeformat, end='\r')
        time.sleep(1)
        t -= 1
    print('Goodbye!\n\n\n\n\n')

Это гарантирует, что следующая печать перезапишет последнюю напечатанную строку:

обратный отсчет

person Martijn Pieters    schedule 07.08.2014
comment
Для протокола: я пробовал это на Python 2.4.3, и он не распечатывался без символа \n, поэтому вместо этого мне пришлось использовать sys.stdout.write() и sys.stdout.flush(). - person TheSoundDefense; 07.08.2014
comment
Это работает очень хорошо... один вопрос: я использую консоль notepad++ для тестирования своих скриптов. Почему в консоли так странно получается? 00:0300:0200:01Goodbye! - person trevor4n; 07.08.2014
comment
@PythonApprentice: Боюсь, консоль Notepad не совсем подходит для такого использования. - person Martijn Pieters; 07.08.2014
comment
@TheSoundDefense: в Python 2 вы могли бы использовать from __future__ import print_function, но это еще не доступно в версии 2.4. - person Martijn Pieters; 07.08.2014
comment
Что мне начать использовать вместо этого? - person trevor4n; 07.08.2014
comment
@PythonApprentice: я не совсем знаю, какие консоли IDE поддерживают правильную печать возврата каретки, извините. - person Martijn Pieters; 07.08.2014

Вот код, который считает с 01:05 до 00:00 в формате ММ:СС.

Питон 3:

import time
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)
countdown(1,5) #countdown(min,sec)

Питон 2:

import time
def countdown(p,q):
    i=p
    j=q
    k=0
    while True:
        if(j==-1):
            j=59
            i -=1
        if(j > 9):  
            print "\r"+str(k)+str(i)+":"+str(j),
        else:
            print "\r"+str(k)+str(i)+":"+str(k)+str(j),
        time.sleep(1)
        j -= 1
        if(i==0 and j==-1):
            break
    if(i==0 and j==-1):
        print "\rGoodbye!"
        time.sleep(1)
countdown(1,5) #countdown(min,sec)
person Srivishnu    schedule 11.07.2015

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

from datetime import datetime

x=datetime.today()
y=x.replace(day=x.day+1, hour=3, minute=1, second=0, microsecond=0)
delta_t=y-x
secs=delta_t.seconds+1

second = (secs % 60)
minut = (secs / 60) % 60
hour = (secs / 3600)
print ("Seconds: %s " % (second))
print ("Minute: %s " % (minut))
print ("Hour: %s" % (hour))

print ("Time is %s:%s:%s" % (hour, minut, second))

Затем вывод выглядит следующим образом:

Seconds: 50 
Minute: 32 
Hour: 12
Time is 12:32:50

Удачи вам в кодировании.

person zemunkh    schedule 03.05.2018

Возможно, эта ссылка поможет: Создание таймера в Python 3

И посмотрите на мой ответ, он такой же и для вашего тоже!

В любом случае, вот ответ:

import time
import os
hour = int(input('Enter any amount of hours you want -+==> '))
minute = int(input('Enter any amount of minutes you want -+==> '))
second = int(input('Enter any amount of seconds you want -+==> '))
time = hour*10800 + minute*3600 + second*60
print('{}:{}:{}'.format(hour,minute,second))
while time > 0:
   time = time - 1
   seconds = (time // 60) % 60
   minutes = (time // 3600)
   hours = (time // 10800)
   print('Time Left -+==> ',hours,':',minutes,':',seconds,)
   os.system("CLS")
if time == 0:
   print('Time Is Over!') 

Вход:

Enter any amount of hours you want -+==> 0
Enter any amount of minutes you want -+==> 0 
Enter any amount of seconds you want -+==> 10

Вывод # Все в одной строке

Time Left -+==> 0:0:10
Time Left -+==> 0:0:9
Time Left -+==> 0:0:8
Time Left -+==> 0:0:7
Time Left -+==> 0:0:6
Time Left -+==> 0:0:5
Time Left -+==> 0:0:4
Time Left -+==> 0:0:3
Time Left -+==> 0:0:2
Time Left -+==> 0:0:1
Time Left -+==> 0:0:0
Time Is Over!
person UltraStudioLTD    schedule 07.06.2019

person    schedule
comment
Было бы очень полезно, если бы вы могли предоставить некоторую информацию, почему код OP не работает с некоторыми объяснениями. - person MaLiN2223; 06.02.2017