Python实现字符矩阵中十字图形个数的计算及开发建议
### 🌟代码实现 ```python # 读取矩阵的行数和列数 n, m = map(int, input().split()) # 初始化矩阵 matrix = [] for _ in range(n): row = input() matrix.append(row) # 初始化十字图形的数量 cross_count = 0 # 遍历矩阵中的每个元素 for i in range(n): for j in range(m): # 检查当前元素是否为 '#' if matrix[i][j] == '#': # 检查上方、下方、左方、右方元素是否都为 '#' up = i > 0 and matrix[i - 1][j] == '#' down = i < n - 1 and matrix[i + 1][j] == '#' left = j > 0 and matrix[i][j - 1] == '#' right = j < m - 1 and matrix[i][j + 1] == '#' # 若四个方向的元素都为 '#',则构成十字图形 if up and down and left and right: cross_count += 1 # 输出十字图形的个数 print(cross_count) ``` ### 📝代码解释 1. **输入矩阵**: - 首先,使用`map(int, input().split())`读取矩阵的行数`n`和列数`m`。 - 然后,通过循环`n`次,每次读取一行字符,并将其添加到`matrix`列表中,从而完成矩阵的输入。 2. **遍历矩阵**: - 使用两层嵌套的`for`循环遍历矩阵中的每个元素。 - 对于每个元素,检查其是否为`'#'`。如果是`'#'`,则进一步检查其上方、下方、左方和右方的元素是否也为`'#'`。 3. **检查十字图形**: - 对于当前元素,通过条件判断`i > 0`、`i < n - 1`、`j > 0`和`j < m - 1`分别确保上方、下方、左方和右方的元素在矩阵范围内。 - 如果四个方向的元素都为`'#'`,则认为构成一个十字图形,将`cross_count`加 1。 4. **输出结果**: - 输出`cross_count`,即十字图形的个数。 ### ⚙️开发建议 - **数据验证**:在实际应用中,建议对输入的`n`和`m`的范围进行验证,确保其满足`1 ≤ n, m ≤ 5`的条件。可以在读取`n`和`m`后添加相应的条件判断,如果不满足条件,给出错误提示并终止程序。 - **代码复用**:如果需要多次计算十字图形的个数,可以将计算逻辑封装成一个函数,提高代码的复用性。例如: ```python def count_crosses(matrix, n, m): cross_count = 0 for i in range(n): for j in range(m): if matrix[i][j] == '#': up = i > 0 and matrix[i - 1][j] == '#' down = i < n - 1 and matrix[i + 1][j] == '#' left = j > 0 and matrix[i][j - 1] == '#' right = j < m - 1 and matrix[i][j + 1] == '#' if up and down and left and right: cross_count += 1 return cross_count n, m = map(int, input().split()) matrix = [] for _ in range(n): row = input() matrix.append(row) print(count_crosses(matrix, n, m)) ``` - **性能优化**:对于较大规模的矩阵,当前的遍历方法可能效率较低。可以考虑使用更高效的算法,例如前缀和等方法来减少不必要的检查。 ### 📚学习资源 - [Python 官方文档](https://docs.python.org/3/):提供了 Python 语言的详细文档和教程。 - 《Python 学习手册》:经典的 Python 学习书籍,适合初学者系统学习 Python 语言。 ######[AI写代码神器 | 987点数解答 | 2026-08-08 15:21:41]
- C++实现读取数字并输出最小值的代码及解释(字节豆包 | 113点数解答 | 2026-03-20 19:32:56)101
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)620
- C++ 实现:轻松计算两个矩阵的乘法并输出结果(字节豆包 | 381点数解答 | 2025-12-03 19:20:23)254
- 揭秘!十进制整数转其他进制用啥存储结构最合适?答案竟是它!(字节豆包 | 57点数解答 | 2024-11-13 01:21:11)324
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)560
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)569
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)560
- C++实现滑动窗口最大值问题及开发建议(字节豆包 | 946点数解答 | 2026-08-15 16:07:43)4
- 使用C++解决滑动窗口最大值查找问题的实现与优化(字节豆包 | 555点数解答 | 2026-08-15 16:08:05)4
- C++实现滑动窗口最大值输出的解决方案及开发建议(字节豆包 | 718点数解答 | 2026-08-15 16:10:19)4
- C语言:按特定格式输入并格式化输出整数、实数和字符(字节豆包 | 103点数解答 | 2024-10-24 11:12:53)505
- Python 实现按指定字符位置逆序字符串,处理多种边界情况!(字节豆包 | 197点数解答 | 2024-11-22 16:55:09)402