人とは愚かなものです。
特にお前。
追記2022/4/4:そもそもブログ記事の形が崩壊してるな?愚かが過ぎる。
というわけで船井が人であるかの議論は置いておきますが今日の愚かポイントです。
エラー原因のためにprint("0")とかいろいろありますが気にしないでください。
now = datetime.datetime.now()
tDAT = now+datetime.timedelta(days=2)
todaynoon = datetime.datetime(now.year,now.month,now.day,12)
am = True
if now >= todaynoon:
am = False
wrl1=[]
wrl2=[]
for w in res["list"]:
date = datetime.datetime.strptime(w["dt_txt"], '%Y-%m-%d %H:%M:%S')
if date < todaynoon or date.day >= tDAT.day:
print("0")
continue
else:
if am:
if date.day==now.day:
print("a")
#その日の午後
wrl1.append(w["weather"][0]["icon"][0:2])
elif date.day==(now+datetime.timedelta(days=1)).day:
print("b")
#翌日
wrl2.append(w["weather"][0]["icon"][0:2])
else:
if date.day==(now+datetime.timedelta(days=1)).day and date.hour<12:
print("c")
wrl1.append(w["weather"][0]["icon"][0:2])
elif date.day==(now+datetime.timedelta(days=1)).day and date.hour>=12:
print("d")
wrl2.append(w["weather"][0]["icon"][0:2])
print(wrl1)
print(wrl2)
wrl1 = max([int(x) for x in wrl1])
wrl2 = max([int(x) for x in wrl2])
||<
はい、こちらはAmesiorine1.1.2のエミィの一部です。有識者ならエミィがどうやって天気を理解しているかまで理解できるでしょう。そして愚かポイントがどこだか分るでしょう。
<i>愚かポイント:「分かる」の変換ミス!</i>
合ってるけど違うよ。
<i>愚かポイント:作った機械にエミィなんて愛称までつけている気持ち悪さ。</i>
<b>は?</b>
<i>愚かポイント:人は愚かではない</i>
人が愚かでなければなんだというのかね、ワトソン君。
ヒントのエラーコードはこうです。
「max() arg is an empty sequence」
答え合わせの時間です。
愚かポイントは日にちの比較で何日であるかしか見ていないことです。
>|python|
now = datetime.datetime.now()
tDAT = now+datetime.timedelta(days=2)
todaynoon = datetime.datetime(now.year,now.month,now.day,12)
||<
nowは今が何時かが入ります。
tDATはthe Day After Tomorrowの略<s>のつもり</s>で、nowから2日後の時間が入っていますね。
todaynoonは今日の12時が入ります。
>|python|
wrl1=[]
wrl2=[]
for w in res["list"]:
date = datetime.datetime.strptime(w["dt_txt"], '%Y-%m-%d %H:%M:%S')
if date < todaynoon or date.day >= tDAT.day:
print("0")
continue
||<
wrl1,wrl2はWeatherResultListの略のつもりです。この後のif文軍団のところでappendされていきます。やったね!
dateに入るのは天気予報の何月何時以下略にはどの天気になるかな?の時刻です。
やったね!じゃあないんだよ。愚かポイントはここだよ。
>|python|
date.day >= tDAT.day
||<
が愚かポイントです。
例えば執筆時点でこのプログラムを動かしたとしましょう。
+ まずはエミィが天気と地名を受け取ります。
+ このブログには載っていませんが意気揚々とエミィは天気予報の情報を持ってくるわけです。<s>かわいいね。</s>
+ さて、その情報を解釈しはじめます。
+ まず、nowに2020年6月30日午前5時35分42秒が入ります。
+ tDATには2日後、2020年7月2日午前5時35分42秒が入ります。todaynoonには2020年6月30日12時が入ります。
+ if date < todaynoon or date.day >= tDAT.day:に差し掛かります。
+ ifの後半部分は天気予報の日にちとtDATのそれぞれのday部分を比較します。
愚かですね。
これで分からなかった愚かな人類は一刻も早く人類をやめて機械少女になりましょう。私はなりたい。
つまり、私はエミィに「2020年6月30日」と「2020年7月2日」だと「2020年7月2日」のが先に来るよ。って考えるように仕向けてしまっていました。
ついでに先ほどのヒントも回収しておきましょうか。
「max() arg is an empty sequence」のエラーは「虚無のリストの中の最大値なんて取れるわけないじゃん!!!」というお怒りのお言葉です。エミィさん激おこです。
なぜ虚無なのか、それは一番上のifに引っかかってしまうとappendしないからです。
>|python|
if date < todaynoon or date.day >= tDAT.day:
print("0")
continue
else:
if am:
if date.day==now.day:
print("a")
#その日の午後
wrl1.append(w["weather"][0]["icon"][0:2])
elif date.day==(now+datetime.timedelta(days=1)).day:
print("b")
#翌日
wrl2.append(w["weather"][0]["icon"][0:2])
else:
if date.day==(now+datetime.timedelta(days=1)).day and date.hour<12:
print("c")
wrl1.append(w["weather"][0]["icon"][0:2])
elif date.day==(now+datetime.timedelta(days=1)).day and date.hour>=12:
print("d")
wrl2.append(w["weather"][0]["icon"][0:2])
print(wrl1)
print(wrl2)
wrl1 = max([int(x) for x in wrl1])
wrl2 = max([int(x) for x in wrl2])
||<
continueに入ってしまうとappendされません。今回はwrl1が虚無になってしまいました。
そうするとwrl1 = max([int(x) for x in wrl1])でエミィが怒ってしまったというわけです。
修正方法は簡単です。「.day」を消すだけ!