You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将自定义字母表映射的字符串转为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:45:51