返回

蓝桥杯备战日志(Python)9-寻找2020-(“异常”的使用-IndexError)

发布时间:2023-02-07 11:35:15 180
# python# 数据

原题

小蓝有一个数字矩阵,里面只包含数字 0 和 2。小蓝很喜欢 2020,他想找 到这个数字矩阵中有多少个 2020 。 小蓝只关注三种构成 2020 的方式:

  1. 同一行里面连续四个字符从左到右构成 2020。
  2. 同一列里面连续四个字符从上到下构成 2020。
  3. 在一条从左上到右下的斜线上连续四个字符,从左上到右下构成 2020。
    例如,对于下面的矩阵:
220000
000000
002202
000000
000022
002020

一共有 5 个 2020。其中 1 个是在同一行里的,1 个是在同一列里的,3 个 是斜线上的。

小蓝的矩阵比上面的矩阵要大,如下给出了小蓝的矩阵。

请帮助小蓝确定在他的矩阵中有多少个 2020。

(数据见:​​https://www.lanqiao.cn/problems/1065/learning/)​​

 

分析

本题思路不难,但有时容易出错,易错点在于每个字符的遍历,这里我们需要每次访问连续的四个字符,使用“列表”存储数据,访问时需要判断是否越界。

在编程语言中,一般都会有异常处理机制,数组越界访问就是一个常见的异常。在Python中,try......except......语句可以捕获异常并进行相应处理,对于列表、元组等迭代对象的访问,越界将抛出IndexError异常

 

源码

# 如下为测试数据,本题数据300行300列
m = '''220000
000000
002202
000000
000022
002020
'''

mat = m.splitlines()
n = len(mat)
count = 0

def count_020_str(x,y,z):
global count
if x == '0' and y == '2' and z == '0':
count += 1

for i in range(n):
for j in range(n):
if mat[i][j] == '2':
try:
count_020_str(mat[i][j+1], mat[i][j+2], mat[i][j+3])
except IndexError:
pass
try:
count_020_str(mat[i+1][j], mat[i+2][j], mat[i+3][j])
except IndexError:
pass
try:
count_020_str(mat[i+1][j+1], mat[i+2][j+2], mat[i+3][j+3])
except IndexError:
pass

print(count)

 

 

上一篇:​​蓝桥杯备战日志(Python)8-完全二叉树的权值(二叉树的性质)​​

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
Python字典如何根据值返回键 2023-02-07 11:01:54