Python演算子・制御フローのよくある間違い

レッスンの本文で注意している点を、つまずきの側から42件ぶん並べ直しました。書いた覚えのある形が見つかったら、 そのままレッスンに戻って前後を読めます。

比較演算子

レッスンを読む

=== の書き間違い

total = budget は代入なので、比較のつもりで書くとエラーか、意図しない上書きになります。くらべるときは必ずイコール 2 つです。

比較演算子で詳しく読む

>>= の取り違え

「予算を超えたら」は >、「予算に達したら」は >= です。ちょうどの値の扱いが変わります。

比較演算子で詳しく読む

True の大文字を忘れる

Python の真偽値は TrueFalse で、先頭が大文字です。true と書くと NameError になります。

比較演算子で詳しく読む

論理演算子

レッスンを読む

記号で書いてしまう

他の言語の &&||Python では使えません。SyntaxError になります。英単語の and or not を使います。

論理演算子で詳しく読む

条件をつなげたつもりで比較を省く

category == "食費" and "日用品" は意図した意味になりません。and の右側にも category == "日用品" のように完全な条件を書きます。

論理演算子で詳しく読む

andor を取り違える

「食費かつ 1000 円以上」を or で書くと、100 円の食費もすべて当たってしまいます。日本語の「かつ」「または」と対応させて確認します。

論理演算子で詳しく読む

カテゴリ名の文字を間違える

"交通""交通 費" のように 1 文字でも違うと一致しません。全角と半角、余分な空白に注意します。

in演算子で詳しく読む

文字列とリストを混同する

"食" in "食費"True ですが、"食" in ["食費"]False です。右側が何なのかで判定の意味が変わります。

in演算子で詳しく読む

in の左右を逆にする

categories in category と書くと意図が反転します。左が探す値、右が探される場所です。

in演算子で詳しく読む

剰余と切り捨て除算

レッスンを読む

/// の取り違え

1000 / 3333.3333333333333 という小数です。f"{1000 / 3}円" と書くと、とんでもない見た目になります。整数がほしいときは // です。

剰余と切り捨て除算で詳しく読む

連鎖比較と優先順位

レッスンを読む

三項演算子

レッスンを読む

語順を間違える

if 条件 then A else B のような書き方は Python にはありません。値が先、if、条件、else、値の順です。

三項演算子で詳しく読む

else を省略する

三項演算子の else は必須です。省くと SyntaxError になります。式は必ず何らかの値にならなければいけないからです。

三項演算子で詳しく読む

クオートを重ねる

f-string の中で外と同じクオートを使うと文字列が途中で切れます。外が " なら内は ' です。

三項演算子で詳しく読む

つくる:予算チェック

レッスンを読む

末尾に \n を付けてしまう

3 行目のうしろに改行を足すと、見た目には分からない差でテストが落ちます。改行は行と行の間の 2 か所だけです。

つくる:予算チェックで詳しく読む

if文の基本

レッスンを読む

コロンを忘れる

if price >= 1000 と書いて末尾の : を落とすと SyntaxError になります。if の行は必ずコロンで終わります。

if文の基本で詳しく読む

インデントがずれる

半角スペース 4 つが基本です。タブと混ぜたり、2 つと 4 つが混在したりすると IndentationError になります。

if文の基本で詳しく読む

if / elif / else

レッスンを読む

elif の順番が逆

if price < 2000 を先に書くと、3002000 未満なので「普通」で確定してしまい、「節約」に永遠に届きません。狭い条件から先に 書きます。

if / elif / elseで詳しく読む

elseifelse if と書く

Python の綴りは elif です。他の言語の書き方をそのまま持ち込むと SyntaxError になります。

if / elif / elseで詳しく読む

条件の組み合わせ

レッスンを読む

day == "土" or "日" と書く

Python はこれを (day == "土") or ("日") と読みます。"日" は空でない文字列なので常に True 扱いになり、どの曜日でも週末になってしまいます。== は省略できません。

条件の組み合わせで詳しく読む

インデントを 1 段しか下げない

内側の if の中身は 12 個分下げます。8 個のままだと外側の if 直下の処理になり、意味が変わります。

条件の組み合わせで詳しく読む

case _ を書き忘れる

どの case にも一致しないと match 全体が素通りされます。関数なら return に届かず None が返り、テストに落ちます。

match文で詳しく読む

case の値をクオートで囲まない

case 食費: と書くと、Python食費 という変数名だと解釈します。文字列と比べたいなら case "食費": です。

match文で詳しく読む

インデントが 1 段足りない

match の中の case で 1 段、case の中身でさらに 1 段下げます。関数の中なら case の中身は 12 個分になります。

match文で詳しく読む

定番:FizzBuzz判定

レッスンを読む

数値のまま返す

最後の枝で return n と書くと、7 という数値が返ります。期待されているのは文字列の "7" なので str(n) が必要です。

定番:FizzBuzz判定で詳しく読む

== を書き忘れる

if n % 3: と書くと「余りが 0 でない」という逆の意味になります。余りが 0 かどうかを見るので n % 3 == 0 です。

定番:FizzBuzz判定で詳しく読む

デフォルト値とor

レッスンを読む

つくる:カテゴリ自動判定

レッスンを読む

or のたびに in を書き忘れる

if "りんご" or "パン" in name:"りんご" が常に True 扱いになるため、すべて食費になります。or でつなぐのは条件そのものです。

つくる:カテゴリ自動判定で詳しく読む