我正在网上学习这门 Python 课程,并试图弄清楚为什么当 x 值为 3 时这个循环是无限的
def mystery(x):
a = [0, 4, 0, 3, 2]
while x > 0:
x = a[x]
return "Done"
神秘(3)无限运行。
是因为当列表值已经是 3 时它一直试图将 x 设置为 3?
我正在网上学习这门 Python 课程,并试图弄清楚为什么当 x 值为 3 时这个循环是无限的
def mystery(x):
a = [0, 4, 0, 3, 2]
while x > 0:
x = a[x]
return "Done"
神秘(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
反复分配。
是的,x 总是 3。最初 x 是 3,并且在索引 3 处,列表的值,即 a[x] 也是 3。因此无限循环。
请记住,列表索引从零开始,因此 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"