鱼C论坛

 找回密码
 立即注册
查看: 2036|回复: 1

[已解决]课后作业求助!!第025讲:列表(VII)!!

[复制链接]
发表于 2023-3-11 04:08:36 | 显示全部楼层 |阅读模式

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

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

x
各位大佬

在答案里   while 循环中   if left < right and top < bottom:  这个判断语句 是起到什么作用的

彻底无法理解这个判断是干嘛用的

[课后作业] 第025讲:列表(VII)

1. 请按照顺时针螺旋顺序输出矩阵中的所有元素。
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)


自己的代码如下:变量名用汉字写便于我的理解
matrix = [[1, 2, 3, 4],
          [5, 6, 7, 8],
          [9, 10, 11, 12]]

长 = len(matrix[0])
宽 = len(matrix)
   
上 = 0
下 = 宽 - 1
左 = 0
右 = 长 - 1
   
结果 = []
   
while 左 <= 右 and 上 <= 下:
    for 行 in range(左, 右 + 1):
        结果.append(matrix[上][行])
   
    for 列 in range(上 + 1, 下 + 1):
        结果.append(matrix[列][右])

    for 行 in range(右 - 1, 左, -1):
        结果.append(matrix[下][行])

    for 列 in range(下, 上, -1):
        结果.append(matrix[列][左])
   
    左 = 左 + 1
    右 = 右 - 1
    上 = 上 + 1
    下 = 下 - 1
   
print(结果)
最佳答案
2023-3-11 05:03:43
这个判断语句 if left < right and top < bottom 的作用是确保矩阵中还有剩余的未遍历的元素,才会执行循环内的代码。

如果矩阵中已经没有未遍历的元素,那么循环就不再执行,程序就可以结束了。

具体来说,当左右指针或上下指针相遇时,说明此时只剩下一行或一列未被遍历。

如果没有这个判断语句,程序会继续执行,导致重复遍历已经遍历过的元素或者越界。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-11 05:03:43 | 显示全部楼层    本楼为最佳答案   
这个判断语句 if left < right and top < bottom 的作用是确保矩阵中还有剩余的未遍历的元素,才会执行循环内的代码。

如果矩阵中已经没有未遍历的元素,那么循环就不再执行,程序就可以结束了。

具体来说,当左右指针或上下指针相遇时,说明此时只剩下一行或一列未被遍历。

如果没有这个判断语句,程序会继续执行,导致重复遍历已经遍历过的元素或者越界。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 07:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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