第94回【Python】数字の文字列操作(時刻1)、数字の文字列操作(時刻2)

現在取り組んでいるのは、paiza ラーニング問題集「C ランクレベルアップメニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

Python をゼロから勉強してみよう、のコーナー 94 回目です。

ルナちゃんが甘えん坊すぎて困ります。カワイスギクライシスです。くっついて寝られると暑くてしょうがないですが、突き放すことはできません。

それでは、今日も頑張ってみようと思います。

数字の文字列操作(時刻1)

時刻を表す長さ 5 の文字列 S が “XX:XX” の形式で与えられます。入力された時刻を時と分に分け、時、分の順番で改行区切りで出力してください。

S

すべてのテストケースにおいて、以下の条件をみたします。

・S は “XX:XX” という形をしており、 “:" の左側は時を、右側は分を表します。時や分が一桁である場合、十の位は 0 で埋められます。また、 00:00 から 23:59 までの 24 時間表記を採用しています。


入力例

01:03

出力例

1
3

結構よくあるパターンな気がします。

Python
H,M = input().split(':')
print(int(H))
print(int(M))
VBA
S = Format(Cells(1, 1), "hh:mm")
Debug.Print Val(Left(S, 2))
Debug.Print Val(Right(S, 2))

数字の文字列操作(時刻2)

時刻を表す長さ 5 の文字列 S が “XX:XX” の形式で与えられます。与えられた時刻の 30 分後の時刻を同じ形式で出力してください。

S

すべてのテストケースにおいて、以下の条件をみたします。

・S が表す時刻は最も遅くて 23:29


入力例

12:31

出力例

13:01

とてもよくあるパターンな気がします。datetime モジュールを利用すれば簡単なんですが、模範解答はとても面倒なことをしていました。

Python
import datetime
S = input()
tdata = datetime.datetime.strptime(S,'%H:%M')
tdata_30min = tdata + datetime.timedelta(minutes=30)
print(f'{tdata_30min:%H:%M}')
Python(模範解答)
S = input()
h = int(S[:2])
m = int(S[3:])
if m + 30 >= 60:
    h = str(h + 1)
    m = str(m + 30 - 60)
else:
    h = str(h)
    m = str(m + 30)
if len(h) == 1:
    h = "0" + h
if len(m) == 1:
    m = "0" + m
print(h + ":" + m)
VBA
S = Format(Cells(1, 1), "hh:mm")
Debug.Print Format(DateAdd("n", 30, S), "hh:mm")

最後に

後の問題の方、このやり方はなかなかないだろう、と思ってしまった。しかし、思い返してみると、別の言語で似たようなことをしたことあるなぁ。なんでだったか・・・。

やっぱり、いろいろな方法を知って、引き出しを多く持っておいたほうがいいに決まっている。VBA で書くのは断念しましたが。面倒過ぎて・・・。

引き続き、よろしくお願いいたします!

Pythonpaiza,学習,Python

Posted by LeoSaki