質問: 0 --------------以下省略------------------ ``` 上のように記述した方が自分の理解としてはわかりやすく、 形式上も綺麗なのにと思ったら異なる実行結果が出てしまいました。 正解の方の条件分岐がなぜ正しく、2つめに記載したコードの条件分岐が何故誤っているのか、 2つめのコードの条件分岐は何をどう分岐しているのか、 初心者にも分かるようご教示いただけるとありがたいです。
回答: 質問者さんは勘違いなさってますね。 ``` if solddate.month not in sales: # s1 sales[solddate.month] = 0 # s2 sales[solddate.month] += int(price) # s3 ``` と ``` if solddate.month in sales: sales[solddate.month] += int(price) else: sales[solddate.month] = 0 ``` では動作が違います。 質問者さんのelse:が勘違いしていますね。 正しいものは、sales[solddate.month] += int(price)が前のifにかかわらず実行されます。ですから、質問者さんのだとelseの場合に実行するので動作が違います。 フローチャートを書いてみると、一目瞭然ですよ。 また、正解の文、s1とs2はキー(solddate.month)がなければ、初期設定する文で当然と思われる文です。かつ、文s3の前になければなりません。 こんな感じでわかっていただけるでしょうか。 自分で数値をあてはめてみてみて、机上で流れを追って動作を確認してみてはいかがでしょうか。デバッガを使ってもよろしいですが。