python - 为什么 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 我发现这个错误显然只出现在某些网格大小上。例如,如果 的大小为grid
5、7 或 9,则输出符合预期。但是如果它是 6、8 或 10 之类的东西,那么输出就不像预期的那样(显然这个错误只发生在偶数大小的情况下?)。
解决方案
推荐阅读
- json - 如何将 JSON 上传到服务器?
- ios - 在 Swift 中以编程方式创建的 UIActivityIndicatorView 不显示
- search - 在域驱动设计中查询聚合子集中的不同值?
- corda - 在 Corda 中,知名、服务和机密身份有什么区别?
- java - Gson如何解析嵌套数组
- android - 如何删除此“任务':app:compileDebugJavaWithJavac'的执行失败”错误?(带有片段的导航视图)
- bash - 在特定字符之后和字符之前添加一个字符
- sql - 输出过去一年每个月的第一天的 where 子句
- database - “[FATAL] [DBT-10503]” 指定的模板文件无效
- java - 如何使用java在QBP ^ Q11中为QPD段设置样本ID