見出し画像

[Python]for文を途中で抜ける(if break)

 以前、OpenWeatherMap APIとLINE Notifyを使って気圧変化を通知する仕組みをPythonを用いて作りました。3時間毎、5日分のお天気データが取得できるので、ここから気圧情報を取得、差分を計算して上昇する日時を通知する。これで天気痛対策を早めに取れるようにしよう、というもの。
 とても便利に使っていたのですが、一言。

「5日先まで分かるの良いけど、情報量が多いよね」

 うん、まぁそうよね。知ってた。そこで、48時間分(2日間)に絞ります。
1日の天気データは24時間÷3時間毎=8個ある(48時間分は16個)。そこで、17個目のデータになったら、繰り返し処理を止めるように修正します。
 今回、天気情報5日分を全てデータフレームに入れて for 文で最後のデータまで繰り返し処理をしていたものを、16個のデータ処理までで止めます。
 繰り返し処理を下記のようにしました。

for i, diff_kiatsu in enumerate(df[1].diff()):
    if i >= 16:
        msg_push = "この2日間の気圧情報でした〜"
        send_line(msg_push)
        break
    else:
        sabun = diff_kiatsu
        if sabun >= 2:
            msg_push = df[0][i-1] + "から気圧急上昇、お薬飲みな〜"
            send_line(msg_push)
            print("msg_push=", msg_push)

【ざっくり解説】※コードは一部のみ。全てを理解するには以前に記事参照
・1行目:気圧差分は日時と気圧差分(3時間前の気圧との差、.diff()で取得)の二次元配列でデータを持っている。これを i=0 から気圧差分データがなくなるまで繰り返す
・2行目:繰り返し処理が17番目(i=16)になったら分岐。i は 0 から始まる。2日分=16個目のデータは i=15 の時なので、 17個目(3日目)は i=16 の時となる。そこで iが16以上で分岐する条件とした
・3,4行目:48時間分のデータ通知が終わったので、その旨をLINE通知する
・5行目:現在実行中の for 分を終了して抜ける。
・6行目:else で、i = 0〜15 の時(48時間以内)のデータの処理に分岐。
・7行目:変数 sabun に気圧差分の数値を代入
・8行目:気圧差分が 2 以上(これを気圧急上昇と定義した)であれば9行目以降を実行
・9行目:気圧が急上昇する時刻を記載し、注意喚起を LINE通知する
・10行目:実行確認用にコンソールに9行目と同じメッセージを表示する

 この修正により、LINE通知が48時間(2日分)のみにスッキリしました。
以下は、表示例。

48時間分だけ通知に変わりました

 LINE Notifyによる自動通知を、より快適に使えるようになりました。

この記事が気に入ったらサポートをしてみませんか?