2013-06-20 15 views
7

私のプログラムではtime.sleep(10)を使用しています。私のプログラムを実行すると、シェルのカウントダウンを表示できますか?私はそれが10,9,8,7やりたいpythonスリープ関数のカウントダウンを表示

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

、その後....

が、これは可能ですか?

+0

すてきな答えをありがとう。 – user1681664

+0

related:[Tkinter、Gtk、TwistedまたはAsyncioイベントループを使用したカウントダウン](http://stackoverflow.com/a/14040516/4279) – jfs

答えて

16

あなたは常にこのコードは、各番号は改行でプリントアウトします少し迷惑な機能を備えてい

#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 
for i in xrange(10,0,-1): 
    time.sleep(1) 
    sys.stdout.write(str(i)+' ') 
    sys.stdout.flush() 
+0

ありがとう、これは素晴らしいです。あなたは私が修正したちょっとした間違いがあります。 時間。睡眠(i) は でなければなりません。休憩(1) – user1681664

+1

確かに、それは答えのために固定されています。 – aestrivex

1

確かに、ちょうど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) 
7

はあなたが好きなカウントダウン機能の操作を行うことができます

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とコンマ,同じ行の印字を維持します(1行の回避します

pad_strは、出力が短くなったときに最後の文字を残す代わりに、最後の行がスペースで上書きされるようにします。

最終印刷では、最後のステータスメッセージが完了メッセージで上書きされ、出力ラインが増えて遅延の証拠があります。

1

ここに私がやった一つだ:

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

を終わりにしては、他のあなたは、アラームまたは何を置くことができます。

1

time.sleep()は、スリープがシグナルによって中断された場合、またはOS /インタープリタによる他のプロセス/スレッドのスケジューリングによって中断された場合、早期に戻ることがあります。

多数の反復のためのドリフトを回避するために、複数の反復を超える精度を向上させるために、カウントダウンクロックでロックすることができる。

#!/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) 
+0

これはより正確な睡眠、ありがとう – wukong

1

これは私が私の最初のpythonの1で学んだものです

import time 

for i in reversed(range(0, 10)): 
    time.sleep(1) 
    print "%s\r" %i, 
2

これは、タイマーを表示するための最良の方法です: - [| |「」、「\」、「」、「」、「/」]が、原理は同じであるレッスン、我々はと共演しました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") 

これは、各サイクルの前の行に上書きします。

関連する問題