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

回答編集履歴

2

スコープの話ではなかった

2021/01/14 08:39

投稿

A_kirisaki
A_kirisaki

スコア2853

answer CHANGED
@@ -1,4 +1,4 @@
1
- Python では `if` 文ブロックの中で 変数のスコープが閉じていますのでその中で宣言した変数はブロックが終わると寿命が終わってしまいます。それより外で宣言された変数であれば `if` の中から書き換えても生き残ります。つまり `Q` に初期値を入れないと `Q` の中身がない可能性があるよ、と言っているわけです。なので
1
+ ~~ython では `if` 文ブロックの中で 変数のスコープが閉じていますのでその中で宣言した変数はブロックが終わると寿命が終わってしまいます。それより外で宣言された変数であれば `if` の中から書き換えても生き残ります。つまり `Q` に初期値を入れないと `Q` の中身がない可能性があるよ、と言っているわけです。~~単純に `if` の条件漏れで `Q` が定義されてい場合があります。なので
2
2
  ```Python
3
3
  Q = 0
4
4
  ```

1

ちょっと理解した

2021/01/14 08:39

投稿

A_kirisaki
A_kirisaki

スコア2853

answer CHANGED
@@ -2,4 +2,11 @@
2
2
  ```Python
3
3
  Q = 0
4
4
  ```
5
- と関数の最初に書いておけば大丈夫でしょう(初期値が 0 なのかわかりませんが)。
5
+ と関数の最初に書いておけば大丈夫でしょう(初期値が 0 なのかわかりませんが)。
6
+
7
+ 追記:
8
+ もうちょっとよく読みました。したらば
9
+ ```Python
10
+ Q = P if Base_10_to_n(d,3)[0] == 1 else ec_double(P)
11
+ ```
12
+ と初期値は書けますね。多分もっとネストも出来ます、が、重要なのは **Q に何らかの値が入っていること**です。