コンテンツにスキップ

赤いメッセージが出たとき

Python で書いた bot にまちがいがあると、画面に赤いメッセージが出ます。 ゲームは、専門用語のエラーを、やさしい日本語に直して見せます。

(ブロックで遊んでいて「思いどおりに動かない」だけなら、こまったときのレスキュー隊へ。ここは Python の赤いメッセージの話です)

メッセージには、いつも 2 つのことが書いてあります。

  1. 何が起きたかと、何行目か
  2. 「こうしてみよう」(最大 2 つ)

「こうしてみよう」は、答えではなく、確かめる場所の案です。 正しい直しかたを決めつけることはしません。

表示意味まず確かめること
「〜」という名前が見つかりません使う前に、その名前を作っていない、または打ち間違い似た名前があるとき「〜の打ち間違いではありませんか?」と出る。変数は使う前に値を入れる
文法のエラー(SyntaxError)書きかたがまちがっているコロン「:」や、カッコの閉じ忘れ。字下げ(インデント)はスペース 4 つでそろえる
数値と「何もない値(None)」を一緒に使おうとしています値が入っていない変数を計算に使った変数に値を入れ忘れていないか。関数が return を忘れていないか
リストの範囲外を読もうとしていますリストの長さより大きい番号を読んだ番号は 0 から始まる。len(リスト) で長さを確かめる
辞書にないキーを読もうとしていますstate["…"] の名前がちがうキーの綴り。.get(キー, 代わりの値) を使うと安全
0 で割ろうとしています割る数が 0 になったif で、0 のときを先に処理する
1 回の考える時間が長すぎます1 回の update で使える計算量を超えた毎回すべて計算し直していないか。結果を変数に覚えておく → 命令数の上限
関数の呼び出しが深すぎます関数が自分自身を呼びつづけている終わる条件(if)を最初に書く

update の中でエラーが起きても、試合は止まりません

起きたことタンクは
1 回エラーになったdrivesteer は前回のまま。firebarrier はしない
10 回つづけてエラーになったそれ以降は、何もしなくなる(行動停止)
命令数の上限を超えたその回は前回と同じ動き。試合のあいだに 3 回までは許される。4 回目で行動停止
戻り値が辞書ではなかった前回と同じ動き

print(...) で、途中の値を実行ログに出せます。対戦画面の下に出ます。 「あの値は、いくつだったんだろう」と思ったら、print を足して確かめましょう。