鱼C论坛

 找回密码
 立即注册
查看: 2552|回复: 9

[已解决]Python课后作业第25节最后一题!

[复制链接]
发表于 2023-2-18 17:13:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求教各位大佬,为什么程序向右向下遍历的时候,判断语句是小于等于。向左向上遍历的时候为什么就是小于了?
源码:
matrix = [[1, 2, 3, 4],
          [5, 6, 7, 8],
          [9, 10, 11, 12]]
   
rows = len(matrix)
cols = len(matrix[0])
   
left = 0
right = cols - 1
top = 0
bottom = rows - 1
   
result = []
   
while left <= right and top <= bottom:
    # 从左往右遍历
    for col in range(left, right + 1):
        result.append(matrix[top][col])
   
    # 从上往下遍历
    for row in range(top + 1, bottom + 1):
        result.append(matrix[row][right])
   
    if left < right and top < bottom:
        # 从右往左遍历
        for col in range(right - 1, left, -1):
            result.append(matrix[bottom][col])
   
        # 从下往上遍历
        for row in range(bottom, top, -1):
            result.append(matrix[row][left])
   
    left = left + 1
    right = right - 1
    top = top + 1
    bottom = bottom - 1
   
print(result)
最佳答案
2023-2-18 22:32:27
不吃辣的雾都人 发表于 2023-2-18 22:27
但是在从上往下遍历的过程中,top=bottom也没有任何意义哇?
for row in range(top + 1, bottom + 1):
...

有意义,因为 left <= right and top <= bottom 作为 while 循环的循环条件,而在 while 循环里面可不止有 for 循环,还有以下代码:

    left = left + 1
    right = right - 1
    top = top + 1
    bottom = bottom - 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-18 18:31:58 | 显示全部楼层

回帖奖励 +1 鱼币

不会,顺领一个鱼币
@isdkz
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-18 22:00:10 | 显示全部楼层

回帖奖励 +1 鱼币

在 range(right - 1, left, -1)  和 range(bottom, top, -1) 中 right 与 left 相等 或 top 与 bottom 相等都是没有意义的

假设 right 与 left 都为 0,那么 range(right - 1, left, -1) 即为 range(-1, 0, -1)

range(-1, 0, -1) 是迭代不出任何元素的

同理, range(bottom, top, -1) 也一样

所以在从右往左遍历与从下往上遍历中加不加等号都一样,还不如不要等号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-18 22:15:12 | 显示全部楼层

回帖奖励 +1 鱼币

顺领一个鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-18 22:27:51 From FishC Mobile | 显示全部楼层
isdkz 发表于 2023-2-18 22:00
在 range(right - 1, left, -1)  和 range(bottom, top, -1) 中 right 与 left 相等 或 top 与 bottom 相等 ...

但是在从上往下遍历的过程中,top=bottom也没有任何意义哇?
for row in range(top + 1, bottom + 1):
        result.append(matrix[row][right])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-18 22:32:27 | 显示全部楼层    本楼为最佳答案   
不吃辣的雾都人 发表于 2023-2-18 22:27
但是在从上往下遍历的过程中,top=bottom也没有任何意义哇?
for row in range(top + 1, bottom + 1):
...

有意义,因为 left <= right and top <= bottom 作为 while 循环的循环条件,而在 while 循环里面可不止有 for 循环,还有以下代码:

    left = left + 1
    right = right - 1
    top = top + 1
    bottom = bottom - 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-19 00:11:56 | 显示全部楼层
同意
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-19 07:40:43 | 显示全部楼层
我的理解是:for in range 的函数特点决定的,最后一个值是不执行的,这时的小于判断就行了,等于加上去也没有执行,但不影响结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-19 16:21:06 | 显示全部楼层
顺领渔币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-6 16:44:41 | 显示全部楼层
我才看到第9章,所以
顺领一个鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-24 09:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表