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

Python读取文本文件获取字符ASCII值及加密代码TypeError报错解决

问题原因
  • 调用encrypt函数时传参错误:你代码中调用encrypt(input_message, public_key)时,传入的第一个参数是原始字符串input_message,不是你提前转换好的ASCII值字典d,遍历字符串拿到的都是字符类型,传入pow函数自然会触发类型不匹配报错。
  • 变量名不合法:public key中间存在空格,Python变量名不允许包含空格,需要修改为public_key。
  • encrypt函数逻辑错误:如果你传入字典d,直接遍历字典默认会遍历键(也就是你存的字符下标0、1、2...),而不是对应的ASCII值,就算传对参数也会计算错误。
  • 缺少模块导入:使用了time.time_ns()但没有提前导入time模块。
  • 文件资源未释放:调用open读取文件后没有执行关闭操作,可能引发资源泄漏,推荐用with上下文管理器自动处理文件关闭。
  • 转换ASCII的逻辑冗余:input_message[i]本身就是单个字符,不需要额外嵌套for it in input_message[i]循环。
修正后的完整代码
import time

# 读取文件并转换为ASCII值列表(比字典更适合后续加密遍历)
ascii_list = []
with open("MyFile.txt", "r", encoding="utf-8") as f:
    input_message = f.read()
    # 直接遍历每个字符转ASCII,无需复杂循环
    for char in input_message:
        ascii_list.append(ord(char))

public_key = (3163, 103603)

def encrypt(char_list, public_key):
    key, n = public_key
    # 直接遍历ASCII值列表做加密计算
    ctext = [pow(char, key, n) for char in char_list]
    return ctext

# 正确传参调用
ctext = encrypt(ascii_list, public_key)
print("encrypted:", ctext)

end_encrypt = time.time_ns()
补充说明

如果你坚持要使用字典存储ASCII值,只需要修改encrypt函数的遍历逻辑,取字典的值即可:

def encrypt(d, public_key):
    key, n = public_key
    ctext = [pow(val, key, n) for val in d.values()]
    return ctext
# 调用时传你原来的字典d即可:encrypt(d, public_key)

内容的提问来源于stack exchange,提问作者rishabh goyal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:48:02