程序填空题:矩阵迷踪 - 实验6 名字绑定 - 《Python编程基础及应用实验教程》(高等教育出版社)
请录入并执行下述程序:
python
m = [[0]*4]*3
m[1][1] = 99
for r in m:
print(r)
上述程序的执行结果是:
[0, 99, 0, 0]
[0, 99, 0, 0]
[0, 99, 0, 0]
程序的第1行通过列表运算语法生成了三行四列的矩阵m,其元素值全部为0;程序第2行则将矩阵的第1行第1列(从0开始计数)修改为99。但程序的执行结果告诉我们,m[0][1]及m[2][1]也被修改为99了,这显然与预期不符。请结合名字绑定及列表的相关理论,对上述现象做出解释。<br>
提示:请在程序最后添加一行:print(id(m[0]),id(m[1]),id(m[2])),执行并观察结果。
<br><br>
通过列表推导算法可以避免上述问题,请使用列表推导语法完成下述程序填空。使得程序的输出与期望相符。
python
m = [[0 for ] for ]
m[1][1] = 99
for r in m:
print(r)
期望的程序输出:
[0, 0, 0, 0]
[0, 99, 0, 0]
[0, 0, 0, 0]
<br>
解题思路: 请参考《Python编程基础及应用实验教程》。
<br> 该书是高等教育出版社《Python编程基础及应用》教材的配套实验指导书。
<br>**拼尽全力还是不会?参考B站习题讲解**<br>
哔哩哔哩up主:[海洋饼干叔叔](https://space.bilibili.com/384177380)<br> [Python课程](https://www.bilibili.com/video/BV1kt411R7uW/)
[Python习题](https://www.bilibili.com/video/BV1iL411t7UZ/)
[简洁的C和C++](https://www.bilibili.com/video/BV1it411d7zx/)
答案:
第1空:c in range(4)
第2空:r in range(3)
python
m = [[0]*4]*3
m[1][1] = 99
for r in m:
print(r)
上述程序的执行结果是:
[0, 99, 0, 0]
[0, 99, 0, 0]
[0, 99, 0, 0]
程序的第1行通过列表运算语法生成了三行四列的矩阵m,其元素值全部为0;程序第2行则将矩阵的第1行第1列(从0开始计数)修改为99。但程序的执行结果告诉我们,m[0][1]及m[2][1]也被修改为99了,这显然与预期不符。请结合名字绑定及列表的相关理论,对上述现象做出解释。<br>
提示:请在程序最后添加一行:print(id(m[0]),id(m[1]),id(m[2])),执行并观察结果。
<br><br>
通过列表推导算法可以避免上述问题,请使用列表推导语法完成下述程序填空。使得程序的输出与期望相符。
python
m = [[0 for ] for ]
m[1][1] = 99
for r in m:
print(r)
期望的程序输出:
[0, 0, 0, 0]
[0, 99, 0, 0]
[0, 0, 0, 0]
<br>
解题思路: 请参考《Python编程基础及应用实验教程》。
<br> 该书是高等教育出版社《Python编程基础及应用》教材的配套实验指导书。
<br>**拼尽全力还是不会?参考B站习题讲解**<br>
哔哩哔哩up主:[海洋饼干叔叔](https://space.bilibili.com/384177380)<br> [Python课程](https://www.bilibili.com/video/BV1kt411R7uW/)
[Python习题](https://www.bilibili.com/video/BV1iL411t7UZ/)
[简洁的C和C++](https://www.bilibili.com/video/BV1it411d7zx/)
答案:
第1空:c in range(4)
第2空:r in range(3)