在2d数组

时间:2017-05-03 23:31:19

标签: python arrays

我试图解决这个问题,如果我的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

1 个答案:

答案 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]

任何非空列表都是“真实的”(即,使ifwhile语句的主体执行),即使它的所有值都是假的。

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)