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

如何让Python代码输出加密文本?遇maketrans长度匹配报错求助

解决ValueError: the first two maketrans arguments must have equal length报错问题

我一眼就看出问题所在了——你不仅混淆了变量名,更关键的是完全误解了str.maketrans的用法,这才导致了那个长度不匹配的报错。

问题根源拆解

  1. 变量名混乱:你定义了in_text和out_text来存储映射规则的字符序列,但调用str.maketrans时却用了未定义的usr_in和usr_out。如果usr_in实际是你获取的用户输入(长度不固定),那它和固定长度26的out_text肯定长度不等,直接触发报错。
  2. maketrans用法错误:这个方法的前两个参数是用来建立全局映射规则的字符序列——第一个是要被替换的所有字符,第二个是对应的替换字符(必须等长)。你错误地把用户输入的字符串当成了第一个参数,这完全违背了它的设计逻辑。

修正后的代码

下面是符合你需求的正确实现,我会逐行解释:

import string

# 1. 定义映射规则的源字符:所有小写英文字母(共26个)
source_chars = string.ascii_lowercase
# 2. 定义映射规则的目标字符:数字重复2次(20个)+ 前6个数字,凑够26个和源字符长度一致
target_chars = (string.digits * 2) + string.digits[:6]

# 3. 验证长度(可选,但能帮你确认映射规则合法)
print(f"源字符长度:{len(source_chars)},目标字符长度:{len(target_chars)}")

# 4. 创建字符映射转换表:每个小写字母对应目标字符中同位置的数字
trans_table = str.maketrans(source_chars, target_chars)

# 5. 获取用户输入并转为小写(确保统一处理)
user_input = input("请输入要加密的字符串:").lower()

# 6. 应用转换表得到加密结果
encrypted_text = user_input.translate(trans_table)

print("加密后的文本:", encrypted_text)

逻辑说明

  • 这个代码会把每个小写字母映射到对应的数字:a→0、b→1...j→9、k→0、l→1...t→9、u→0...z→5,完全符合你“小写字母转数字加密”的需求。
  • 非小写字母的字符(比如大写、符号、数字本身)会保持原样,因为它们不在source_chars的映射规则里。

关键注意事项

  • 永远确保str.maketrans的前两个参数长度完全相等,这是强制要求。
  • 区分“映射规则的字符序列”和“要处理的输入字符串”:前者用来创建转换表,后者用转换表来处理,千万别搞混!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:35:46