この Python コースをオンラインで受講しており、x 値が 3 のときにこのループが無限になる理由を理解しようとしています。
def mystery(x):
a = [0, 4, 0, 3, 2]
while x > 0:
x = a[x]
return "Done"
mystery(3) は無限に実行されます。
リストの値がすでに 3 になっているのに、x を 3 に設定しようとしているからですか?
この Python コースをオンラインで受講しており、x 値が 3 のときにこのループが無限になる理由を理解しようとしています。
def mystery(x):
a = [0, 4, 0, 3, 2]
while x > 0:
x = a[x]
return "Done"
mystery(3) は無限に実行されます。
リストの値がすでに 3 になっているのに、x を 3 に設定しようとしているからですか?
配列のインデックスは 0 から始まることを覚えておいてください。
a = [0, 4, 0, 3, 2]
それからa[3] == 3
だからこの行
x = a[x]
x
3 以外に設定することはありません。
「リストの値がすでに 3 になっているのに、x を 3 に設定しようとし続けるからですか?」
はい。そのリストの をa[3]
指します。3
だから、繰り返しx
割り当てられているだけです。3
リストのインデックスは 0 から始まるので、a[3]=3 であることを思い出してください。次に、ループを手動で展開してみます。
x = 3
x=3 > 0、はい
x = a[x] = a[3] = 3
x=3 > 0、はい
x = a[x] = a[3] = 3
x=3 > 0、はい
等々。
def mystery(x): # Here x = 3
a = [0, 4, 0, 3, 2]
while x > 0: # Since x = 3 the program enters the loop
x = a[x] # a[3] = 3 and hence x is assigned 3. Again x = 3 and therefore
# the program will get into an infinite loop in the while
# statement.
return "Done"