Python - 神秘的无限循环

时间:2013-09-12 07:22:16

标签: python indexing while-loop infinite-loop

I'm taking this Python course online我试图弄清楚当x值为3时这个循环是无限的

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

神秘(3)无限奔跑。

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

5 个答案:

答案 0 :(得分:4)

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

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

然后a[3] == 3

所以这一行

x = a[x] 

永远不会将x设置为3以外的任何内容!

答案 1 :(得分:2)

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

是。 a[3]指向该列表中的3。因此x只是被重复分配给3

答案 2 :(得分:1)

是的,x总是3.最初x是3,而索引3是list的值,即a [x]也是3.Hence无限循环。

答案 3 :(得分: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,是

  4. 等等。

答案 4 :(得分: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"