25

プログラムで time.sleep(10) を使用しています。プログラムの実行時にシェルにカウントダウンを表示できますか?

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

そして、10,9,8,7を実行したい....

これは可能ですか?

4

11 に答える 11

36

あなたはいつでもできる

#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)
于 2013-06-20T17:36:53.193 に答える
10

コンソールから最後の番号をクリアする簡単なソリューション:

import time

for i in range(10,0,-1):
    print(f"{i}", end="\r", flush=True)
    time.sleep(1)

デフォルトでは、print 関数が設定されますend="\n"。これは、以降の print の呼び出しが新しい行に出力されることを意味します。これを変更してend="\r"、各呼び出しの後に出力を置き換えることができます。( Python でキャリッジ リターン "\r" はどのように機能しますか)。

また、使用flushすると、バッファリングの問題を心配する必要がなくなります。( print() は何をしflushますか? )

これはどのように見えるかです:

秒読み

于 2021-04-04T11:46:47.790 に答える
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 によって最後の行がスペースで上書きされることが保証されます。

最後の出力では、最後のステータス メッセージが完了メッセージで上書きされ、出力行がインクリメントされるため、遅延の証拠があります。

于 2013-06-20T17:37:35.030 に答える
2

ここに私がしたものがあります:

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

最後に、もしあなたと他の人なら、アラームか何かを置くことができます。

于 2013-08-11T18:51:32.797 に答える
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)
于 2013-06-20T17:37:20.150 に答える