Pythonでコマンドラインストップウォッチを作成する

この記事では、Pythonのtimeモジュールを使い、ラップタイムも計測できるシンプルなコマンドラインベースのストップウォッチプログラムを作成する方法を解説します。


目次

1. プログラムの設計

このストップウォッチは以下のロジックで動作します。

  1. プログラムを開始し、ユーザーがEnterキーを押すのを待つ。
  2. 最初のEnterキーが押されたら、計測を開始し、その時刻を開始時刻として記録する。
  3. 無限ループに入り、ユーザーが再度Enterキーを押すたびにラップを記録する。
  4. 各ラップでは、「合計経過時間」と「直前のラップからの経過時間」を計算して表示する。
  5. ユーザーがCtrl-Cを押すとプログラムが中断され、 gracefulに(穏便に)終了する。

2. 完成したコード全体

上記の設計に基づいた完全なスクリプトを以下に示します。

import time

# --- 準備 ---
print('Enterキーを押すと開始します。')
print('その後、Enterキーを押すたびにラップタイムを記録します。')
print('Ctrl-Cで終了します。')

# 最初のEnter入力を待つ
input()
print('スタート!')

start_time = time.time()
last_lap_time = start_time
lap_counter = 1

# --- メインループ ---
try:
    while True:
        # 次のEnter入力を待つ
        input()
        
        # 現在時刻を取得
        current_time = time.time()
        
        # 時間を計算
        total_time = round(current_time - start_time, 2)
        lap_time = round(current_time - last_lap_time, 2)
        
        # 結果を表示
        print(f"ラップ #{lap_counter}: {total_time}秒 ({lap_time}秒)")
        
        # 次のラップのために変数を更新
        lap_counter += 1
        last_lap_time = current_time

except KeyboardInterrupt:
    # Ctrl-Cが押されたらループを抜けて終了
    print('\n終了しました。')


3. コードの解説

時間計測の準備 最初のinput()でユーザーの入力を待ち、プログラムを一時停止させています。Enterが押されると、その直後のtime.time()start_time(全体の開始時刻)とlast_lap_time(最初のラップの開始時刻)として記録されます。

経過時間の表示 while True:ループの中で、input()は再びユーザーがEnterを押すまでプログラムを停止させます。Enterが押されると、その時点のtime.time()と、保存しておいたstart_timeおよびlast_lap_timeとの差分を計算することで、合計経過時間とラップタイムを算出しています。

try...except KeyboardInterrupt while True:のような無限ループは、通常Ctrl-Cを押すことで強制的に中断されますが、そのままだとエラーメッセージが表示されてしまいます。 try...except KeyboardInterrupt:ブロックでループ全体を囲むことにより、Ctrl-Cによる中断を例外として捕捉し、エラーメッセージの代わりに「終了しました。」というクリーンなメッセージを表示してプログラムを穏便に終了させることができます。

まとめ

このスクリプトは、time.time()でタイムスタンプを取得し、その差分を計算するという単純な原理で動作しています。input()でプログラムの進行を制御し、try...except KeyboardInterruptでユーザーによる終了操作を綺麗にハンドリングすることで、対話的で使いやすいコマンドラインツールを作成できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次