【親子でPythonを学ぶ!】時計の読み方をマスターしよう編

親子でプログラミングを学ぶ写真
  • URLをコピーしました!

『〇〇くん、今何時?』って聞かれてお子さんは答えることができますか?

うちの息子は、今年小学校に上げる予定なのですが、何となくニュアンスで大まかな時刻は言えますが、だいたい違ってます💦

今回は以下のようなpythonで時計の読み方の練習ができるコードを作成しました。

今、『何時何分』って言える様にお子さんと一緒に勉強していきましょう!!

記事の内容
  • 時計の読み方の重要性
  • 時計の読み方の基本
  • タイムゾーンについて
  • 時計の読み方を練習するPythonコード
  • まとめ
タスカ

今回、コードはGoogle Colabを使用して書いています。

他のIDE(VS codeなど)を使用した場合、うまく実行できるか分かりませんので、Google Colabを使用してコードを書いてみてください。

目次

時計の読み方の重要性

お子さんが、時計の読み方を学ぶことが非常に重要です。なぜなら、時計の読み方をマスターすることで、お子さんのさまざまなスキルや日常生活が向上するからです。

まず、時間の管理ができるようになることは、お子さんの時間に対する意識を高め、予定を守るために役立ちます。時間は貴重なリソースであり、正確に時刻を把握することは、日々の活動を円滑に進めるために不可欠です。

また、時計の読み方を身につけることで、スケジュールを立てるスキルも磨かれます。学業、遊び、家事など、お子様の日々の活動を効果的に管理するためには、正確な時刻を理解し、予定を組むことが必要です。

時間に対する敬意を持つことも大切です。約束の時間に遅れないことは、他の人々への配慮の表れであり、礼儀正しい行動の一環です。お子様に時計を使った時間の尊重を教えることは、社会的なスキルの基盤を築くのに役立ちます。

そして、時計の読み方を学ぶことは、認知能力や数学的なスキルの発展にも寄与します。時計の針や数字を理解し、時間を読むことは、視覚的な認識能力を高め、数学的な思考を養います。

時計の基本

時計は、時刻を表示するために、時(じ)、分(ふん)、秒(びょう)の3つの要素を組み合わせて表示します。時刻は、1日を24時間に分割したものです。1時間は60分、1分は60秒で構成されます。

時計の文字盤

1から12までの数字が等間隔で配置されています。時計の針がこの数字を指すことで、今何時かがわかります。

時針(じしん)

短い針で、時間を指します。私たちに『何時か』を教えてくれます。たとえば、上の時計のように時針が10の数字の近くにあったら、『10時』です。 時針は、1 時間ごとに1 周します。

分針 (ふんしん)

1~12の数字の間には、たくさんの小さな目盛りがあり、これは分を示していて、分針がこれらの目盛りを指すことで、今何分かを教えてくれます。分針は長い針で、右回りに1 時間ごとに 12 周します。
分針が 1 ⇨「5分」。分針が 2 ⇨「10分」。分針が 3 ⇨ 15分。これは、時計の数字1つが「5分」を意味するからです。

秒針(びょうしん)

秒針は時計の中で一番細くて、速く動く針を指します。一部の時計には、秒を示すためのさらに小さな目盛りもあります。この針は、私たちに『今、何秒か』を教えてくれます。秒針が12に戻るたびに、1分経ったことがわかります。秒針は、1 分ごとに 60 周します。

タイムゾーンについて

タイムゾーンとは、地球上の地域ごとに、時刻を決めるためのものです。同じ時間でも、地球上の異なる地域では、時刻が異なります。

地球上で時刻が異なる理由を順を追って解説していきます。

地球は、丸い形をしていて、くるくるとゆっくり回転しています。

下のイラストの様に地球が回転すると、太陽の光は地球の一部にしか当たりません。

だから、地球上のある場所では朝になり、別の場所では夜になるのです。

たとえば、日本の時刻は朝の8時だとします。一方でアメリカでは前の日の夜になります。これは、地球がくるくる回っていて、太陽の光が同時に全ての場所に当たらないからです。
日本の方が13 ~ 14 時間、アメリカよりも早く時間が進んでいます。

Python時計の読み方を練習しよう!

pythonを使用して、時計の読み方の勉強ができるコードを作成して、お子さんと一緒に勉強してみましょう。

好きな時刻を入力して、時計を作成しよう

下記のコードは、まず簡易的なアナログ時計を描画します。

そして、スライダーを操作することで『時間』と『分』を変更し、好きな時刻をアナログ時計に表示させることができるコードです。

下記のコードをGoogle Colaboratoryにコピーして、貼り付けて実行してみてください。

好きな時刻を入力して、時計を作成するコード
import matplotlib.pyplot as plt
import numpy as np
from ipywidgets import widgets, HBox, VBox
from IPython.display import display, clear_output

class InteractiveClock:
    def __init__(self):
        # Initialize hands
        self.hour_angle = 0
        self.minute_angle = 0

        # Interactive controls
        self.hour_slider = widgets.IntSlider(min=0, max=11, step=1, description='時:')
        self.minute_slider = widgets.IntSlider(min=0, max=59, step=1, description='分:')
        self.update_button = widgets.Button(description='時計を更新')

        # Button event
        self.update_button.on_click(self.on_button_click)

    def draw_clock(self):
        fig, ax = plt.subplots()
        ax.set_xlim(-1.5, 1.5)
        ax.set_ylim(-1.5, 1.5)
        ax.set_aspect('equal', 'box')
        ax.axis('off')

        # Draw clock face
        for hour in range(1, 13):
            angle = np.pi/2 - hour*np.pi/6
            x = 1.2 * np.cos(angle)
            y = 1.2 * np.sin(angle)
            ax.text(x, y, str(hour), ha='center', va='center')

        # Draw minute marks
        for minute in range(60):
            angle = np.pi/2 - minute*np.pi/30
            x_start = np.cos(angle)
            y_start = np.sin(angle)
            x_end = 0.95 * x_start
            y_end = 0.95 * y_start
            ax.plot([x_start, x_end], [y_start, y_end], color='black')

        circle = plt.Circle((0, 0), 1, color='black', fill=False)
        ax.add_artist(circle)

        # Draw hands
        ax.plot([0, 0.5*np.cos(self.hour_angle)], [0, 0.5*np.sin(self.hour_angle)], color='blue', lw=6)
        ax.plot([0, 0.8*np.cos(self.minute_angle)], [0, 0.8*np.sin(self.minute_angle)], color='green', lw=4)

        plt.show()

    def on_button_click(self, b):
        hour = self.hour_slider.value
        minute = self.minute_slider.value
        self.hour_angle = np.pi/2 - (hour + minute/60) * np.pi/6
        self.minute_angle = np.pi/2 - minute * np.pi/30

        clear_output(wait=True)
        self.draw_clock()
        display(VBox([HBox([self.hour_slider, self.minute_slider]), self.update_button]))

    def display(self):
        self.draw_clock()
        display(VBox([HBox([self.hour_slider, self.minute_slider]), self.update_button]))

# Create and display the interactive clock
interactive_clock = InteractiveClock()
interactive_clock.display()
実行結果

ランダムに時刻を表示させ、何時か答えてみよう

下記のコードは、実行ボタンをクリックするたびに、描写されたアナログ時計にランダムな時刻を表示させます。

また、『正しい時刻は?』ボタンを押すことで、表示された時刻の答えを知ることもできます。

下記のコードをGoogle Colaboratoryにコピーして、貼り付けて実行してみてください。

このコードを使うと時計を読む練習をゲーム形式でできますので、是非試してみてください。

ランダムに時刻を表示させるコード
import matplotlib.pyplot as plt
import numpy as np
import random
from ipywidgets import widgets, HBox, VBox
from IPython.display import display, clear_output

class InteractiveClock:
    def __init__(self):
        # Initialize hands with random time
        self.hour = random.randint(0, 11)
        self.minute = random.randint(0, 59)
        self.update_angles()

        # Interactive controls
        self.update_button = widgets.Button(description='正しい時刻は?')
        self.time_label = widgets.Label()

        # Button event
        self.update_button.on_click(self.on_button_click)

    def update_angles(self):
        self.hour_angle = np.pi/2 - (self.hour + self.minute/60) * np.pi/6
        self.minute_angle = np.pi/2 - self.minute * np.pi/30

    def draw_clock(self):
        fig, ax = plt.subplots()
        ax.set_xlim(-1.5, 1.5)
        ax.set_ylim(-1.5, 1.5)
        ax.set_aspect('equal', 'box')
        ax.axis('off')

        # Draw clock face
        for hour in range(1, 13):
            angle = np.pi/2 - hour*np.pi/6
            x = 1.2 * np.cos(angle)
            y = 1.2 * np.sin(angle)
            ax.text(x, y, str(hour), ha='center', va='center', fontweight='bold')

        # Draw minute ticks
        for minute in range(60):
            angle = np.pi/2 - minute*np.pi/30
            start = 0.95 if minute % 5 else 0.9 # Longer ticks at each 5 minute interval
            end = 1
            ax.plot([start*np.cos(angle), end*np.cos(angle)],
                    [start*np.sin(angle), end*np.sin(angle)],
                    color='black', lw=1)

        circle = plt.Circle((0, 0), 1, color='black', fill=False)
        ax.add_artist(circle)

        # Draw hands
        ax.plot([0, 0.5*np.cos(self.hour_angle)], [0, 0.5*np.sin(self.hour_angle)], color='blue', lw=6)
        ax.plot([0, 0.8*np.cos(self.minute_angle)], [0, 0.8*np.sin(self.minute_angle)], color='green', lw=4)

        plt.show()

    def on_button_click(self, b):
        # Display the correct time
        self.time_label.value = f"The correct time is: {self.hour:02d}:{self.minute:02d}"

        clear_output(wait=True)
        self.draw_clock()
        display(VBox([self.update_button, self.time_label]))

    def display(self):
        self.draw_clock()
        display(VBox([self.update_button]))

# Create and display the interactive clock
interactive_clock = InteractiveClock()
interactive_clock.display()
実行結果

まとめ

今回は、時計を読める様にするために、時計の基本的なことを解説していきました。

また、pythonで時計の読み方を練習できるコードを書いていますので、お子さんと一緒に実際に使って頂いて、その感想を教えて頂けたら嬉しいです。

この記事が少しでも皆様のお役に立てたら幸いです。

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

コメント

コメントする

目次