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
相关产品推荐
相关产品推荐

