Python ұйқы функциясының кері санағын көрсету

Мен бағдарламамда time.sleep (10) пайдаланамын. Бағдарламамды іске қосқан кезде, кері санауды қабықшада көрсету мүмкін бе?

>>>run_my_program()
tasks done, now sleeping for 10 seconds

содан кейін 10,9,8,7 жасағым келеді.

бұл мүмкін бе?

9
Барлық керемет жауаптарыңызға рахмет.
қосылды автор user1681664, көзі

7 жауаптар

әрдайым жасай аласыз

#do some stuff
print 'tasks done, now sleeping for 10 seconds'
for i in xrange(10,0,-1):
    time.sleep(1)
    print i

Бұл үзіндіде әр нөмір жаңа жолға басып шығарылатын сәл тітіркендіргіш сипатта болады. Бұған жол бермеу үшін сіз

import sys
import time
for i in xrange(10,0,-1):
    sys.stdout.write(str(i)+' ')
    sys.stdout.flush()
    time.sleep(1)
17
қосылды
Ия, шын мәнінде, жауап үшін бекітілген.
қосылды автор aestrivex, көзі
рахмет, бұл тамаша. сізде түзетілген шағын қателігіңіз бар. time.sleep (i) уақыты болуы керек (1)
қосылды автор user1681664, көзі

Сіз кері санау функциясын орындауға болады:

import sys
import time

def countdown(t, step=1, msg='sleeping'):  # in seconds
pad_str = ' ' * len('%d' % step)
for i in range(t, 0, -step):
    print '%s for the next %d seconds %s\r' % (msg, i, pad_str),
    sys.stdout.flush()
    time.sleep(step)
print 'Done %s for %d seconds!  %s' % (msg, t, pad_str)

Каретки қайтарады \ r және үтір , басып шығаруды сол жолда сақтайды (әр кері санның бір жолына жол бермеу)

Секундтардың саны азайған сайын, pad_str соңғы жолдың соңғы таңбалардың (-тердің) қалдырылуының орнына бос орындардың үстінен жазылғанын қамтамасыз етеді, себебі шығу қысқарады.

Соңғы басып шығару соңғы хабарламаны аяқталған хабарламамен ауыстырады және шығыс жолын көбейтеді, сондықтан кідірістің дәлелі бар.

7
қосылды

Python 3.x үшін консольде таймерді көрсетудің ең жақсы жолы:

import time
import sys

for remaining in range(10, 0, -1):
    sys.stdout.write("\r")
    sys.stdout.write("{:2d} seconds remaining.".format(remaining))
    sys.stdout.flush()
    time.sleep(1)

sys.stdout.write("\rComplete!            \n")

Бұл әрбір циклде алдыңғы жолда жазылады.

4
қосылды

time.sleep() may return earlier if the sleep is interrupted by a signal or later (depends on the scheduling of other processes/threads by OS/the interpreter).

Көптеген итерациялар бойынша дәлдікті жақсарту үшін, итерацияның үлкен саны үшін ауытқуды болдырмау үшін кері санақ сағатпен бекітілуі мүмкін:

#!/usr/bin/env python
import sys
import time

for i in reversed(range(1, 1001)):
    time.sleep(1 - time.time() % 1) # sleep until a whole second boundary
    sys.stderr.write('\r%4d' % i)
1
қосылды
бұл дәл ұйқы, рахмет
қосылды автор wukong, көзі

Әрине, тек 10 минусқа иерархиясын басып шығаратын циклды жазыңыз, содан кейін әрбір иерацияны 1 секунд ұйықтаңыз және 10 итерацияға жүгініңіз. Немесе одан да икемді болу үшін:

def printer(v):
    print v
def countdown_timer(duration, step=1, output_function=printer,
                    prompt='Waiting {duration} seconds.'):
    output_function(prompt.format(duration=duration))
    for i in xrange(duration/step):
        output_function(duration - step * i)
1
қосылды

Міне, мен жасадым:

import time
x = input("How long is the countdown?")
while a != 0:
    print x
    time.sleep(1)

Соңында, егер сіз және тағы да бір дабыл қоюға немесе кез келген нәрсе жасауға болады.

1
қосылды

Бұл менің бірінші питон сабағымның бірінде оқыған нәрсе, біз [«/», «-», «|», «\», «|») ойнадық, бірақ принцип бірдей:

import time

for i in reversed(range(0, 10)):
    time.sleep(1)
    print "%s\r" %i,
1
қосылды