这是我的代码,它是随机生成的四个数字(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)
答案 0 :(得分:3)
all
方法检查数组中的所有元素是否为真(在这种情况下,不等于零),因此一旦存在一个while
,则False
循环中的条件将变为rooms
。 rooms
中的单个零。
您实际要检查的是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,最后我陷入了永无止境的循环。这意味着问题出在您的索引实现中。
话虽如此,现在知道了两种检查非零元素的方法,您需要检查代码是否存在实现错误。