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

Python实现字符移位加密时numpy运算报TypeError解决方法

报错根因

报错触发位置是代码最后一行print(chr(ord('@')+Z)):

  • 代码中Z是numpy生成的整数数组,而Python原生chr()函数仅支持传入单个整数标量,直接传入数组就会触发该类型错误。
  • 原代码额外存在逻辑缺陷:未做字母区间循环处理,移位超出a-z/A-Z范围时会生成非字母的特殊符号,不符合移位加密的预期。
实操修复步骤

方案1:移除冗余numpy依赖(推荐,适配场景更简单)

该字符加密场景无需引入numpy,用纯Python逐字符处理即可,从根源避开数组传参问题,同时补全边界循环逻辑:

Original_word = input("What is the phrase you want to encrypt:")
Y = int(input("what number do you want the letter to move forward:"))

encrypted = []
for char in Original_word:
    # 小写字母移位,超出z后循环回到a
    if char.islower():
        offset = (ord(char) - ord('a') + Y) % 26
        encrypted.append(chr(offset + ord('a')))
    # 大写字母移位,超出Z后循环回到A
    elif char.isupper():
        offset = (ord(char) - ord('A') + Y) % 26
        encrypted.append(chr(offset + ord('A')))
    # 非字母字符(数字、符号、空格)直接保留不加密
    else:
        encrypted.append(char)

print("加密结果:", ''.join(encrypted))

方案2:保留numpy的修复写法

如果需要保留numpy逻辑,不要直接把数组传入原生chr(),用numpy向量化方法逐元素转换即可:

import numpy as np

Original_word = input("What is the phrase you want to encrypt:")
Y = int(input("what number do you want the letter to move forward:"))

n = [ord(x) for x in Original_word]
real_list = np.array(n)
Z = real_list + Y
# 向量化包装chr函数,支持逐元素处理数组
vec_chr = np.vectorize(chr)
encrypted_arr = vec_chr(Z)
# 注意:该版本未补全字母边界循环逻辑,如需正确加密请参考方案1补充取模判断
print(''.join(encrypted_arr))
功能验证

运行修复代码后,输入测试用例:

  • 待加密短语:abcXYZ
  • 移位数:3
  • 预期正确输出:defABC,输出匹配即修复完成。

内容的提问来源于stack exchange,提问作者Jack Ng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:06:07