You need to enable JavaScript to run this app. Python3.9环境下读取TXT执行凯撒解密遇ord()报错的修复求助
优惠活动
大模型
产品
解决方案
定价
更多

Python3.9环境下读取TXT执行凯撒解密遇ord()报错的修复求助

Python 3.9 凯撒密码TXT解密报错修复

问题现象

编写凯撒密码解密功能时,目标是读取本地TXT文件完成解密,运行代码触发报错:ord() expected a character, but a string of length 586 was found,运行环境为Python 3.9。

报错根因

核心逻辑错误出在文件读取环节:

  • 原有代码text = open(input("enter string: "))仅创建了文件操作对象,并未实际读取TXT内的文本内容
  • 直接把文件对象传入解密函数后,函数内的逐字符遍历会按行读取文件内容,第一次拿到的就是长度为586的整行文本
  • 后续代码将整行文本传入ord()方法,而ord()仅支持传入长度为1的单个字符,直接触发参数不匹配报错

修复方案

  • 调整文件读取逻辑,通过文件对象的read()方法拿到完整文本内容后,再传入解密函数处理
  • 改用with上下文管理器操作文件,自动管理文件句柄的打开与关闭,避免资源泄漏
  • 兼容非字母字符的处理逻辑,避免换行、数字、标点等特殊字符破坏解密流程
  • 读取文件时指定utf-8编码,减少跨平台读取中文TXT的乱码问题

修复后完整可运行代码

def decrypt(string, shift):
    cipher = ''
    for char in string:
        # 保留非字母字符(空格、换行、数字、标点等)
        if not char.isalpha():
            cipher = cipher + char
        elif char.isupper():
            cipher = cipher + chr((ord(char) - shift - 65) % 26 + 65)
        else:
            cipher = cipher + chr((ord(char) - shift - 97) % 26 + 97)
    return cipher

# 读取TXT文件内容
file_path = input("请输入TXT文件的完整路径:")
with open(file_path, 'r', encoding='utf-8') as f:
    plain_content = f.read()

shift_num = int(input("请输入解密偏移量:"))
print("="*30)
print("原始TXT内容:\n", plain_content)
print("解密后结果:\n", decrypt(plain_content, shift_num))

效果验证

代码运行后会提示输入TXT文件路径、解密偏移量,不会再触发ord()参数长度不匹配的报错,非英文字母的内容会直接原样保留,仅对大小写英文字母按凯撒规则完成偏移解密。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 06:06:03