質問するログイン新規登録

回答編集履歴

2

追記

2018/11/10 16:36

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -34,9 +34,13 @@
34
34
  flag = False
35
35
  ```
36
36
 
37
- トップレベル以外で関数を定義するのはわりあい高度なテクなの
37
+ トップレベル以外で関数を定義するのはわりあい高度なテクです。
38
- その利点や使い方が明確に分からないうちは避けた方が良いです。
38
+ ですので、その利点や使い方が明確に分からないうちは避けた方が良いです。
39
39
 
40
+ また、今回の場合そもそもフラグなんて必要なく、
41
+ 外部のループを無限ループにして適宜breakすれば良いだけの話です。
42
+
43
+ ---
40
44
  なんというか、継ぎ接ぎな印象のコードです。
41
45
  一度書籍や[チュートリアル](https://docs.python.jp/3/tutorial/index.html)などで体系的に学ぶことをお勧めします。
42
46
 

1

追記

2018/11/10 16:36

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -38,4 +38,19 @@
38
38
  その利点や使い方が明確に分からないうちは避けた方が良いです。
39
39
 
40
40
  なんというか、継ぎ接ぎな印象のコードです。
41
- 一度書籍や[チュートリアル](https://docs.python.jp/3/tutorial/index.html)などで体系的に学ぶことをお勧めします。
41
+ 一度書籍や[チュートリアル](https://docs.python.jp/3/tutorial/index.html)などで体系的に学ぶことをお勧めします。
42
+
43
+ バグそのものの原因
44
+ ---
45
+ 関数内のローカル変数とモジュールレベルの変数が別物になっているからです。
46
+ ```Python
47
+ >>> a = 0
48
+ >>> def func():
49
+ ... a = 42
50
+ ...
51
+ >>> func()
52
+ >>> print(a)
53
+ 0
54
+ ```
55
+
56
+ globalというキーワードもありますが、今はまだ手を出すべきでは無いでしょう。