我试图解决这个问题,如果我的while循环可行的话,我会完成。 仅供上下文:练习是开发一个程序,通过网格发送一些跑步者,直到网格中的每个点都被触及。我的网格是一个二维数组,每次跑步者到达一个新位置时,布尔值从True切换到False。当触摸数组中的所有位置(False)时,应该停止while循环。它没有。 尽管数组中的所有布尔值都为False,但任何(字段)仍然返回True。
field = stdarray.create2D(n, n, True)
field[middle][middle] = False
laeufer = stdarray.create2D(n, 2, middle)
while any(field):
for x in range(n):
step = 0
if laeufer[x][0] == 0 and laeufer[x][1] == 0: \
step = random.choice([0, 2])
elif laeufer[x][0] == n - 1 and laeufer[x][1] == n - 1:
step = random.choice([1, 3])
elif laeufer[x][0] == 0 and laeufer[x][1] == n - 1:
step = random.choice([0, 3])
elif laeufer[x][0] == n - 1 and laeufer[x][1] == 0:
step = random.choice([1, 2])
elif laeufer[x][0] == 0:
step = random.choice([0, 2, 3])
elif laeufer[x][0] == n - 1:
step = random.choice([1, 2, 3])
elif laeufer[x][1] == 0:
step = random.choice([0, 1, 2])
elif laeufer[x][1] == n - 1:
step = random.choice([0, 1, 3])
else:
step = random.randrange(0, 4)
if step == 0:
laeufer[x][0] += 1
elif step == 1:
laeufer[x][0] -= 1
elif step == 2:
laeufer[x][1] += 1
else:
laeufer[x][1] -= 1
steps += 1
test = not all(field)
field[laeufer[x][0]][laeufer[x][1]] = False
我知道,很多ifs但它一直有效,直到while循环。它只是继续运行一个全False数组而不是终止。 为什么在没有遗骸的情况下,任何()都没有切换到False?
我希望你能帮助我。 谢谢, 烫发
编辑: 从调试器:
field = {list} <class ‚list‘>:[…]
__len__ = {int} 4
0 = {list} <class ‚list‘>: [False, False, False, False]
1 = {list} <class ‚list‘>: [False, False, False, False]
2 = {list} <class ‚list‘>: [False, False, False, False]
3 = {list} <class ‚list‘>: [False, False, False, False]
i = {int} 0
laeufer = {list} <class ‚list‘>: [[1, 1], [2, 2], [2, 0], [3, 2]]
n = {int} 4
runden = {int} 1000
step = {int} 3
steps = {int} 103
test = False
答案 0 :(得分:3)
当您迭代list
list
时,您会获得列表。
>>> matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> for row in matrix:
... print(row)
...
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
任何非空列表都是“真实的”(即,使if
或while
语句的主体执行),即使它的所有值都是假的。
if []:
print("Won't execute: Empty list is falsy")
if [0, 0.0, False, '', b'']:
print("Will execute: Non-empty list is truthy")
如果要检查二维列表中的任何位置是否存在真值,可以使用:
any(any(row) for row in matrix)