後日投稿しますが、pythonを使ってタイピングゲームの作成中、「UnboundLocalError: local variable ‘point’ referenced before assignment」と言う入門書では見たこともないエラーが出現してテンパってしまいました。
import random point = 0 def keytype(): maxc = int("0x7a",16) minc = int("0x61",16) txt = random.randint(minc,maxc) txt = chr(txt) print("これ => {}".format(txt)) typ = input("入力してください") if typ == txt: print("正解") point += 1 return point for i in range(5): point = keytype() print(point)
何をしたかったかと言うと、、、
for i in range(5):でkeytype()関数を5回繰り返して、正解数をpointに代入。
が、 UnboundLocalError: local variable ‘point’ referenced before assignment なるものが出現して夢叶わず。
直訳すると、「バインドされていない地元のエラー」???
直訳するとどんどん深みにハマっていきそうですが、localはおそらくdef keytype()内を指していると思われます。
もう少し中身を見てみると分かりそうな気がします。
local variable ‘point’ referenced before assignment
直訳すると、「ローカル変数である”point”は割り当ての前に参照された」です。
2行目に代入した変数”point”と関数内の”point”は別物であると判断されたみたいですね。
関数内のローカル変数と、外のグローバル変数は別物と言う事を忘れておりました。
スコープについて、もう一度ちゃんと意識する必要がありそうです。
グローバル変数を参照することはできます。
ちょっとややこしいのですが、グローバル変数を関数内で上書きしようとするとエラーが出るが、参照は普通にできるという事ですね。
ちなみに、グローバル変数を書き換える方法は、関数内で「global 変数」を宣言すれば可能です。
上の様な感じですね。
この辺はもうちょっとちゃんとインプットして、また改めてメモを作ろうと思います。