Python字符串列表加解密报错:ord()函数参数类型异常求助
解决
ord() expected a character, but string of length 4 found错误 嘿,我一眼就瞅出问题出在哪啦!这个报错的核心是你把整个字符串传给了ord()函数,但它只能处理单个字符。
错误原因拆解
当你遍历字符串列表时,比如列表是["test", "demo"],如果直接循环取每个元素(比如for s in str_list),那s是整个长度为4的字符串,而ord()需要的是单个字符(比如s[0]这种),所以就触发了这个类型错误。解密环节肯定也会犯同样的错——因为解密时你大概率会反过来把整个字符串传给chr(),而chr()同样需要单个整数编码。
修复后的代码示例
下面是修正后的加解密代码,我给你加上了注释说明关键点:
def encrypt(str_list): encrypted_results = [] # 第一步:遍历列表中的每一个字符串 for original_str in str_list: encrypted_chars = [] # 第二步:遍历当前字符串中的每一个单个字符 for char in original_str: # 对单个字符执行加密逻辑(这里用简单的ASCII偏移3做示例) encrypted_code = ord(char) + 3 encrypted_chars.append(str(encrypted_code)) # 把同一字符串的加密编码拼接成一个字符串,方便存储/传输 encrypted_results.append(",".join(encrypted_chars)) return encrypted_results def decrypt(encrypted_list): decrypted_results = [] # 第一步:遍历加密后的列表元素 for encrypted_str in encrypted_list: decrypted_str = "" # 拆分加密字符串为单个字符编码 for code_str in encrypted_str.split(","): # 解密逻辑:还原ASCII偏移 decrypted_char = chr(int(code_str) - 3) decrypted_str += decrypted_char decrypted_results.append(decrypted_str) return decrypted_results # 测试一下功能 test_input = ["hello stackoverflow", "coding is fun"] encrypted = encrypt(test_input) print("加密结果:", encrypted) decrypted = decrypt(encrypted) print("解密结果:", decrypted)
核心修复点
- 加密时用嵌套循环:先遍历列表里的每个字符串,再遍历字符串里的每个字符,确保
ord()只接收单个字符 - 解密时先把加密后的编码字符串拆分成单个编码,再逐个用
chr()还原成字符,最后拼接回原字符串
内容的提问来源于stack exchange,提问作者Kim YOOKO
相关产品推荐
相关产品推荐

