![見出し画像](https://assets.st-note.com/production/uploads/images/92527760/rectangle_large_type_2_0b3d2666ea07e1fea89dd6ec04ae904c.png?width=1200)
[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日分)のみにスッキリしました。
以下は、表示例。
![](https://assets.st-note.com/img/1670068297151-C6Bg0zYeio.png)
LINE Notifyによる自動通知を、より快適に使えるようになりました。