如何将自定义字母表映射的字符串转为3×3数字矩阵?报错排查
问题解决:TypeError及3×3矩阵转换实现
错误原因
核心问题出在这行代码:
salam = salam.lower
lower是字符串的内置方法,必须通过()调用才能返回小写字符串。你这里没有加括号,导致salam被赋值为方法对象而非字符串,后续salam[i]尝试对方法做下标访问,自然触发'builtin_function_or_method' object is not subscriptable错误。
完整修正代码
结合你要将字符串转自定义字母表数字、输出3×3矩阵的需求,修正后的代码如下:
import numpy as np salam = "APAKABARBROOOOO" # 修正:调用lower()方法得到小写字符串 salam = salam.lower() output = [] char2 = [' ','a','b','c','d','e','f','g','h','i','j','k','l', 'm','n','o','p','q','r','s','t','u','v','w','x','y','z','.',','] # 3×3矩阵需要9个元素,取字符串前9个字符转换 for char in salam[:9]: # 查找字符在自定义字母表中的索引,添加到output output.append(char2.index(char)) # 将列表转换为3×3的numpy矩阵 result_matrix = np.array(output).reshape(3, 3) print(result_matrix)
关键修正点说明
- 修复
lower()调用:确保salam是字符串类型,支持下标访问 - 收集转换结果:原代码仅创建数组但未保存,现在将每个字符的索引添加到
output列表 - 适配3×3矩阵:截取字符串前9个字符(因为3×3=9),最后用
reshape(3,3)转换为目标矩阵 - 替换while循环为for循环:更简洁地遍历字符,避免手动维护循环变量的错误
输出示例
运行后会输出3×3的数字矩阵:
[[ 1 16 1] [11 1 2] [ 1 18 2]]
内容的提问来源于stack exchange,提问作者Gamaliel Isaac Gan
相关产品推荐
相关产品推荐

