Python

【Python】外部入力した秒数を "日時分秒" で表示させたい

こんばんは!
今日はいつもと少し違う感じの記事

Pythonで秒数を外部入力すると
"日時分秒" で返すプログラム
を作りたいと思います。





Contents






目次

プログラム作成

早速プログラムを組んでいきます。



<>外部入力と変数へ格納
まずは任意の秒数を外部入力させる部分

[python]
num = input("second = ")
[/python]

この1行を実行すると
数字入力を促されます。

キーボードから任意の数字を入力すると、
"num" という変数に格納されるのです。



次に "num" を今後計算処理していくために
整数型に変換する必要があります。

[python]
sec = int(num)
[/python]

これで "num" を整数型へ変換した変数 "sec" ができました。



上の2つのプログラムは入れ子にすることで
下のようにまとめられます。

[python]
sec = int(input("second = "))
[/python]






時間計算


外部入力し計算可能な整数型へ変換した秒数 "sec" を
日、時、分、秒に分ける計算をしていきます。

[python]
d = sec // (3600 * 24)
h = (sec % (3600 * 24)) // 3600
m = (sec % 3600 ) // 60
s = sec % 60
[/python]



秒に変換

簡単なので4行目から説明します。
sec を60で割った余りを "s" とします。
"s" は 0~59 の値を取り、秒を意味します。




分に変換

次に3行目
ここから少し頭を使いますが、
"m" は分を表し、範囲は 0~60
この範囲を秒数で表すと 0~3600 になります。

()の中で入力した秒数を3600で割った余りを求めています。
3600を超えると「分」という単位から外れるので無視するのですね。

()の計算後、60で割った商が「秒」も除いた
純粋な「分」になります。




時に変換

同様の考え方で2行目、
「時間」をみていきましょう。

時間の範囲は0~12、
これを秒数で表すと 0~86400 となります。
(プログラムでは 3600*24 と表記をしています)

()の中で外部入力した秒数を86400で割った余りを求めて、
秒数を「時間」という単位に収めておきます。

()で求めた数字を3600で割った商が「分」を除いた
純粋な「時間」になります。




日に変換

最後に1行目
外部入力した秒数を、時間の範囲の最大値86400で割った商を求めることで、
純粋な「日数」が求まります。

86401を86400で割ると、1余り1ですので
1日と1秒になるわけです。










ここまでのプログラムで
外部入力した任意の秒数を
日, 時, 分, 秒
4つの単位に分けることができました。






アウトプット

では簡単にアウトプットまでさせちゃいましょう。

[python]
print('{0}sec = {1}d{2}h{3}m{4}s'.format(sec, d, h, m, s))
[/python]

formatで整えていますが、日本語訳すると
「(外部入力した)sec は、d日h時m分s秒」と表示させる行です。



ここまでのプログラムをまとめます。

[python]
sec = int(input("second = "))
d = sec // (3600 * 24)
h = (sec % (3600 * 24)) // 3600
m = (sec % 3600 ) // 60
s = sec % 60
print('{0}sec = {1}d{2}h{3}m{4}s'.format(sec, d, h, m, s))
[/python]

これを何度か実行します。

このようにしっかりと秒数が日時分秒に置き換えられて返ってきました。






まとめ

Pythonを独学で勉強中なのですが、
四則演算よりワンランク上の数値計算をしたく、
日付の計算をしようと思いこのプログラムを作りました。



調べながら作ったのですが、
「datetime」などの既存モジュールを
使う方法しか出回ってなく、

自分で頭を使ってプログラムを組んだのは
良い勉強になりました。

-Python
-