我需要循环执行,直到数组的所有元素都等于0

时间:2018-10-31 12:38:59

标签: python

这是我的代码,它是随机生成的四个数字(1、2、3、4)之一,如果将数组视为板子,则向左或向上或向下旋转,起始点是房间[0] [0]。在将数组的一个元素更改为0后,它停止了,但是我需要它直到所有元素都等于0,谢谢!

import numpy
import random
N = 2
M = 2
time = 0
room = numpy.ones((N, M), dtype=int)
print(room)

i = 0
j = 0


while room.all() != 0:
    turn = random.choice([1, 2, 3, 4])
    if turn == 1 and i > 0:
        print("up")
        i = i - 1
        room[i][j] = 0
        time += 1
    elif turn == 2 and i < N - 1:
        print("down")
        i = i + 1
        room[i][j] = 0
        time += 1
    elif turn == 3 and j > M - 1:
        print("right")
        j = j + 1
        room[i][j] = 0
        time += 1
    elif turn == 4 and j < 0:
        print("left")
        j = j - 1
        room[i][j] = 0
        time += 1
    else:
       turn = random.choice([1, 2, 3, 4])
       print("hit the wall")

    print(room)

2 个答案:

答案 0 :(得分:3)

all方法检查数组中的所有元素是否为真(在这种情况下,不等于零),因此一旦存在一个while,则False循环中的条件将变为roomsrooms中的单个零。

您实际要检查的是while rooms.any(): ...的{​​{3}}元素是否真实(此处不等于零)。

您可以改用!= 0(并省略与a1 b1 c1 的比较)。

答案 1 :(得分:1)

有两种方法可以解决此问题:

第一:如@timgeb所建议:

while room.any():

第二::使用np.count_nonzero检查数组中是否存在任何非零值。然后在while循环中使用此条件

while np.count_nonzero(room) > 0:  

但是,当我使用这些条件中的任何一个时,两个元素变为0,两个元素保持为1,最后我陷入了永无止境的循环。这意味着问题出在您的索引实现中。

话虽如此,现在知道了两种检查非零元素的方法,您需要检查代码是否存在实现错误。