わかりました、タイマーが遅れている理由から始めましょう。
プログラムで何が起こるかというと、time.sleep()
呼び出しがプログラムの操作を 1 秒間「スリープ」させ、その秒が経過すると、プログラムは再び実行を開始します。1s + Xs
しかし、プログラムは、実行するように指示した他のすべてのコマンドを実行する時間が必要なため、実際にすべての操作を実行するには時間がかかります。これは非常に基本的な説明ですが、タイマーが同期しない根本的な理由です。
常に新しい行に出力している理由については、print()
関数には、指定された文字列に追加する定義済みの行末文字があります。
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
end="YourThing"
次のようにprintステートメントを入れることで、これを何かで上書きできます
for x in range(3):
print("Test", end="")
上記の例では、空の文字列が行末に追加されるため、ループの出力は次のようになります。
"TestTestTest"
タイマーの問題を解決するには、次のようなものを使用する必要があります
timePoint = time.time()
while True:
#Convert time in seconds to a gmtime struct
currentTime = time.gmtime(time.time() - timePoint))
#Convert the gmtime struct to a string
timeStr = time.strftime("%M minutes, %S seconds", currentTime)
#Print the time string
print(timeStr, end="")