回答編集履歴

1

追記

2021/05/24 05:01

投稿

Zuishin
Zuishin

スコア28669

test CHANGED
@@ -7,3 +7,53 @@
7
7
 
8
8
 
9
9
  > ブール演算のコンテキストや、式が制御フローの文で使われる際には、次の値は偽だと解釈されます: False 、 None 、すべての型における数値の 0、空の文字列、空のコンテナ (文字列、タプル、リスト、辞書、集合、凍結集合など)。 それ以外の値は真だと解釈されます。
10
+
11
+
12
+
13
+ ## 追記 exists_at(0, 0, 1) が非 0 になる理由
14
+
15
+
16
+
17
+ ```Python
18
+
19
+ def exists_at(i,j,d):
20
+
21
+ if d == 0:
22
+
23
+ return 1
24
+
25
+ elif exists_at(i//p_rn, j//p_cn,d-1)==0:
26
+
27
+ return 0
28
+
29
+ else:
30
+
31
+ return pat[i%p_rn][j%p_cn]
32
+
33
+ ```
34
+
35
+
36
+
37
+ exists_at(0, 0, 1) を呼ぶと d は 0 でないため、exists_at(i//p_rn, j//p_cn,d-1)==0 が評価されます。
38
+
39
+ ここに i, j, d を代入すると、exists_at(0, 0, 0) == 0 になります。
40
+
41
+ つまり exists_at(0, 0, 1) は、exists_at(0, 0, 0) == 0 の時に 0 を返し、そうでない時に pat[i%p_rn][j%p_cn] を返すということになります。
42
+
43
+
44
+
45
+ exists_at(0, 0, 0) を呼ぶと、d は 0 なので 1 になります。
46
+
47
+ つまり exista_at(0, 0, 0) == 0 ではないので、exists_at(0, 0, 1) の戻り値は pat[i%p_rn][j%p_cn] になります。
48
+
49
+ ここで i == 0, j == 0 なので、exists_at(0, 0, 1) は pat[0][0] つまり 1 が戻り値になります。
50
+
51
+
52
+
53
+ 以上のように、exists_at(0, 0, 1) は 1 なので 0 ではありません。
54
+
55
+ そのため、exists_at(0, 0, 1) == 0 は False になります。
56
+
57
+
58
+
59
+ exists_at(1, 1, 2) も同様に計算してください。