首页 > 解决方案 > 为什么 if 和 else 条件似乎都在这段代码(Python)中执行?

问题描述

我知道以前在这个网站上发布过类似的问题,但我真的认为这个案例不同,所以请听我说。

我有一些简单的 Python 代码,可以创建一个 2D 字符列表(即长度为 1 的字符串),尝试处理 2D 列表并将其打印出来。这里是:

def printGrid(image):
    for row in range(len(image)):
        for col in range(len(image[row])):
            print(image[row][col], end='')
        print()
    print()


def invert(image):
    for row in range(len(image)):
        for col in range(len(image[row])):
            if image[row][col] == '.':
                image[row][col] = 'X'
            else:
                image[row][col] = '.'


grid = [['.'] * 10] * 10    # 2D square of '.'
printGrid(grid)
invert(grid)
printGrid(grid)

我期待代码打印出 s 的 1 个方格和.s 的另一个方格X,如下所示:

..........
..........
..........
..........
..........
..........
..........
..........
..........
..........

XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX
XXXXXXXXXX

但相反,我得到了 2 个.s 的正方形,如下所示:

..........
..........
..........
..........
..........
..........
..........
..........
..........
..........

..........
..........
..........
..........
..........
..........
..........
..........
..........
..........

else尝试调试了一段时间后,发现如果我把函数中的块注释掉了invert,那么我得到了预期的输出(你可以尝试运行代码自己看看)。这使我得出结论,if块和else块都已执行。有谁知道为什么会发生这种情况?(我正在使用 Python 3.6.1 顺便说一句)

PS 我发现这个错误显然只出现在某些网格大小上。例如,如果 的大小为grid5、7 或 9,则输出符合预期。但是如果它是 6、8 或 10 之类的东西,那么输出就不像预期的那样(显然这个错误只发生在偶数大小的情况下?)。

标签: pythonif-statement

解决方案


推荐阅读