2

これは、stackoverflow.com での最初の質問なので、寛大にお願いします :) 理論的にストップウォッチ プログラムを作成する方法について問題があります。どの言語で書かれているかは問題ではありません。これは理論的には問題ありませんか?

a = 0
While 1 == 1:
    Print(a)
    Sleep(1s)
    a = a+1

私の目にはこれで問題ないはずですが、Python で同様のものを実行すると、正確に出力されません。私の「実際の」アナログ ストップウォッチで測定すると、1 秒未満の場合もあれば、1 秒を超える場合もあります。私が知りたいのは、ストップウォッチを理論的にのみ作成する方法です。実際のコードは必要ありません。返信を待って、私の質問を理解していただければ幸いです:)

4

3 に答える 3

4

これをチェックしてください:Pythonのストップウォッチ

ですから、あなたの質問に答えるには: はい、可能です。

元のコードの精度について: python の time.sleep() はどのくらい正確ですか?

于 2012-08-23T19:20:12.800 に答える
2

sleep、指定された正確な時間スリープすることは保証されていません。ほぼその時間スリープしますが、少しずれている可能性があります。もちろん、毎回同じ方向に少しずれていれば、それが積み重なっていき、最終的にあなたの答えは大きくずれることになります。

幸いなことに、お使いのコンピューターにはあまり速くドリフトしない時計が付属しており、それをストップウォッチとして使用できます。毎回 1 秒間スリープするのではなく、より短い時間 (100 分の 1 秒など) スリープします。目を覚ますたびに、現在の時刻をテストします。開始時刻から 1 秒以上経過している場合は、印刷してください。

于 2012-08-23T19:32:05.890 に答える
0

印刷が通常とは異なる方法で行われる理由は、出力がバッファリングされている可能性があります。標準出力のバッファリングを無効にすると、期待どおりに動作するはずです。出力バッファリングを無効にするを参照してください。

既存のスクリプトを実行する場合、 (少なくとも Linux では)-uオプションを提供することでそれを実現できます。pythonからman python:

-u stdin、stdout、および stderr を完全にバッファリングしないように強制します。重要なシステムでは、stdin、stdout、および stderr もバイナリ モードにします。xreadlines()、readlines()、およびファイルオブジェクト反復子 (「sys.stdin の行」) には、このオプションの影響を受けない内部バッファリングがあることに注意してください。これを回避するには、「while 1:」ループ内で「sys.stdin.readline()」を使用します。

于 2012-08-23T19:34:14.420 に答える