0

我正在网上学习这门 Python 课程,并试图弄清楚为什么当 x 值为 3 时这个循环是无限的

def mystery(x):
  a = [0, 4, 0, 3, 2]
  while x > 0:
    x = a[x]
  return "Done"

神秘(3)无限运行。

是因为当列表值已经是 3 时它一直试图将 x 设置为 3?

4

5 回答 5

4

记住数组索引从 0 开始,所以如果

a = [0, 4, 0, 3, 2]

然后a[3] == 3

所以这条线

x = a[x] 

永远不要设置x为 3 以外的任何值!

于 2013-09-12T07:25:41.220 回答
2

“是不是因为当列表值已经是 3 时,它一直试图将 x 设置为 3?”

是的。a[3]指向3该列表中的。所以x只是被3反复分配。

于 2013-09-12T07:25:49.940 回答
1

是的,x 总是 3。最初 x 是 3,并且在索引 3 处,列表的值,即 a[x] 也是 3。因此无限循环。

于 2013-09-12T07:23:27.867 回答
0

请记住,列表索引从零开始,因此 a[3]=3。然后,尝试手动展开循环:

  1. x = 3

    是 x=3 > 0,是

  2. x = a[x] = a[3] = 3

    是 x=3 > 0,是

  3. x = a[x] = a[3] = 3

    是 x=3 > 0,是

等等。

于 2013-09-12T07:28:09.947 回答
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"
于 2013-09-12T07:39:29.763 回答