Python | 1 日 60 分 × 7 日アプリ学習:Python文法を学ぶアプリ ストップウォッチ編

Web APP Python
スポンサーリンク
スポンサーリンク

1日目のゴールと全体像

この7日間の新しいテーマは「ストップウォッチアプリ」です。 時間を測る、誰もがイメージしやすい小さなアプリを題材にして、Pythonの文法をもう一度、別の角度から体に馴染ませていきます。

1日目のゴールは、次の5つを「ストップウォッチ」という具体的な流れの中でイメージできるようになることです。

  • 変数:経過時間や状態(動作中か停止中か)を入れる“意味のある箱”
  • 条件分岐:スタート・ストップ・リセットなどの動きを切り替える“頭脳”
  • 繰り返し:時間を少しずつ進めて画面に表示し続ける“枠組み”
  • 関数:スタート処理・ストップ処理・表示処理を部品として切り出す“再利用可能なパーツ”
  • ファイル操作:計測結果を記録として残す“アプリの記憶”

ストップウォッチは「時間が進む」という感覚がはっきりしているので、 変数・条件分岐・繰り返しがどう組み合わさるかを理解するのに、とても良い題材です。

変数とは何か(時間と状態を入れる箱)

経過時間と“動いているかどうか”を変数で表す

ストップウォッチアプリで一番大事なのは、 「今どれくらい時間が経っているか」「今ストップウォッチが動いているのか止まっているのか」 です。

これをPythonの変数で表現すると、例えば次のようになります。

elapsed_seconds = 0.0   # 経過時間(秒)
running = False         # 動作中かどうか(True/False)
Python

ここで重要なのは、変数名が「何を表しているか」をそのまま伝えていることです。 er ではなく、elapsed_secondsrunning のように意味のある名前にすることで、コードが「読める文章」に近づいていきます。

さらに、スタートした瞬間の時刻を覚えておく変数も登場します。

start_time = None
Python

この start_time は、「ストップウォッチをスタートした瞬間の時刻」を覚えておくための箱です。 後で「今の時刻 − スタートした時刻」で経過時間を計算するために使います。

1日目では、「変数はただの箱ではなく、ストップウォッチの世界を形作る“名前付きの意味”だ」という感覚を、 時間という身近な題材で掴んでください。

条件分岐とは何か(スタート・ストップ・リセットを切り替える頭脳)

ユーザーの操作に応じて動きを変える

ストップウォッチアプリでは、ユーザーが次のような操作をします。

  • スタート
  • ストップ
  • リセット

これをPythonで表現するには、 「今どの操作が選ばれたか」に応じて動きを変える条件分岐 が必要です。

簡単な例は次のようになります。

command = input("操作を選んでください (s: start, t: stop, r: reset, q: quit): ")

if command == "s":
    # スタート処理
elif command == "t":
    # ストップ処理
elif command == "r":
    # リセット処理
elif command == "q":
    # 終了
else:
    print("不正な入力です")
Python

ここで条件分岐は、 「ユーザーの入力に応じて、アプリの動きを切り替える司令塔」 として働いています。

さらに、「すでに動いているのにスタートしようとした」「止まっているのにストップしようとした」といったおかしな操作も防ぎたいですよね。

if command == "s":
    if running:
        print("すでに動作中です")
    else:
        running = True
        start_time = time.time()
        print("ストップウォッチをスタートしました")
Python

このように、条件分岐は

  • 正しい動きを選ぶ
  • おかしな操作を止める

という二つの役割を持つことができます。

1日目では、「条件分岐は単なる if ではなく、ストップウォッチの“頭脳”だ」という意識でコードを眺めてみてください。

繰り返しとは何か(時間を進め続ける枠組み)

少しずつ時間を進めて画面に表示する

ストップウォッチは、「スタートしたら時間が進み続ける」ものです。 これをPythonで表現するには、 「一定間隔で同じ処理を繰り返す」 という仕組みが必要になります。

簡単なテンプレートは次のようになります。

import time

elapsed_seconds = 0.0
running = False

while True:
    command = input("操作を選んでください (s: start, t: stop, r: reset, q: quit): ")

    if command == "s":
        running = True
        start_time = time.time()
    elif command == "t":
        running = False
    elif command == "r":
        running = False
        elapsed_seconds = 0.0
    elif command == "q":
        print("終了します")
        break

    if running:
        now = time.time()
        elapsed_seconds = now - start_time
        print(f"経過時間: {elapsed_seconds:.2f} 秒")
Python

ここで深掘りしたいのは、

  • while True: が「アプリを動かし続ける枠組み」になっていること
  • ループの中で「操作を受け取る」「状態を更新する」「時間を表示する」という流れが繰り返されていること

です。

繰り返しは、 ストップウォッチを「一度だけ時間を測るもの」ではなく、 “動き続けるアプリ” にするための仕組みです。

1日目では、「ループの一回分が一つのストーリーになっているか」を意識してコードを眺めてみてください。

関数とは何か(スタート・ストップ・表示を部品にする)

処理を“意味ごとにまとめて名前をつける”

関数は、「まとまった処理に名前をつけて、何度でも呼び出せるようにする」ための仕組みです。 ストップウォッチアプリでは、スタート処理・ストップ処理・リセット処理・表示処理を関数にすると、コードがぐっと読みやすくなります。

例えば、スタート処理を関数にします。

import time

def start_stopwatch():
    print("ストップウォッチをスタートします")
    return True, time.time()
Python

ストップ処理はこうです。

def stop_stopwatch():
    print("ストップウォッチをストップします")
    return False
Python

リセット処理はこうです。

def reset_stopwatch():
    print("ストップウォッチをリセットします")
    return False, 0.0
Python

表示処理はこう書けます。

def show_elapsed(elapsed_seconds):
    print(f"経過時間: {elapsed_seconds:.2f} 秒")
Python

これらを使って、メインの流れは次のように書けます。

running = False
elapsed_seconds = 0.0
start_time = None

while True:
    command = input("操作を選んでください (s: start, t: stop, r: reset, q: quit): ")

    if command == "s":
        running, start_time = start_stopwatch()
    elif command == "t":
        running = stop_stopwatch()
    elif command == "r":
        running, elapsed_seconds = reset_stopwatch()
    elif command == "q":
        print("終了します")
        break

    if running and start_time is not None:
        now = time.time()
        elapsed_seconds = now - start_time
        show_elapsed(elapsed_seconds)
Python

ここで重要なのは、 関数を使うことで「何をしているか」が一目で分かるようになる ということです。

start_stopwatch と書いてあれば「スタート処理だな」と分かるし、 show_elapsed と書いてあれば「経過時間を表示しているんだな」と分かります。

1日目では、「関数はアプリの部品である」という感覚を、 ストップウォッチという具体的な処理を通して掴んでください。

ファイル操作とは何か(計測結果を“記録”として残す)

計測した時間をファイルに保存する

ストップウォッチアプリを少しだけ“実用的なツール”に近づけるなら、 「計測結果をファイルに残す」 機能をつけると面白くなります。

例えば、勉強時間や運動時間を測って、その結果を一覧として残しておきたい場合などです。

Pythonでは、open を使ってファイルに書き込むことができます。

def save_result(elapsed_seconds):
    with open("stopwatch_history.txt", "a", encoding="utf-8") as f:
        line = f"計測結果: {elapsed_seconds:.2f}\n"
        f.write(line)
Python

これをストップ処理のあとに呼び出します。

elif command == "t":
    running = stop_stopwatch()
    save_result(elapsed_seconds)
Python

これで、stopwatch_history.txt というファイルに、 計測した時間の履歴が一行ずつ残っていきます。

後からファイルを開けば、 「いつ何秒測ったか」を一覧で見ることができます。

ファイル操作は、「プログラムの外にデータを残す」ための基本的な技術です。 ストップウォッチの計測結果という具体的な形で、この技術に触れていきましょう。

1日目で本当に掴んでほしいこと

1日目のゴールは、「ストップウォッチ」という身近なテーマを通して、次の5つの柱を“意味付きで”理解することです。

  • 経過時間や状態を変数として扱うことで、「値に名前をつける」感覚を掴む。
  • スタート・ストップ・リセットを条件分岐で切り替え、「ユーザーの操作に応じて動きを変える」ロジックを体験する。
  • 繰り返しで時間を進め続け、「アプリとしての枠組み」を感じる。
  • 関数でスタート処理・ストップ処理・表示処理を部品にし、「意味ごとにコードを分ける」感覚を育てる。
  • ファイル操作で計測結果を保存し、「プログラムの外にデータを残す」技術に触れる。

ストップウォッチという一つのアプリの中に、Pythonの基礎がぎゅっと詰まっています。 2日目以降は、このストップウォッチアプリを少しずつ拡張しながら、 ラップ機能や複数回の計測、履歴の表示など、「実際に使えるアプリ」に近づけていきます。

タイトルとURLをコピーしました