如何用列表优化Python 4位数字加密函数?
4位数字加密函数的列表循环优化实现
核心优化思路
用预定义映射列表替代match-case的分支判断,结合循环(或列表推导式)批量处理每位数字,核心逻辑如下:
- 拆分输入的4位数字为单个数字的列表,便于逐个处理
- 用列表存储数字到加密后数字的映射——列表索引访问是O(1)常数时间,远快于match-case的分支判断
- 循环遍历数字列表,通过映射列表完成加密转换
- 按需执行加密规则中的位置交换(如果原有规则包含此步骤)
- 将处理后的数字列表拼接为最终加密结果
完整代码实现
def encrypt(num): # 将输入转换为4位数字的整数列表 digits = [int(char) for char in str(num)] # 替代match-case的加密映射列表(可根据原有match-case逻辑修改) # 示例规则:原数字+5后取模10,对应映射关系0→5、1→6...9→4 encrypt_mapping = [5, 6, 7, 8, 9, 0, 1, 2, 3, 4] # 循环遍历完成加密转换(列表推导式是简化的循环写法) encrypted_digits = [encrypt_mapping[d] for d in digits] # 示例:若原有加密规则包含位置交换(如第1与第3位、第2与第4位交换) encrypted_digits[0], encrypted_digits[2] = encrypted_digits[2], encrypted_digits[0] encrypted_digits[1], encrypted_digits[3] = encrypted_digits[3], encrypted_digits[1] # 拼接为加密后的数字并返回 return int(''.join(map(str, encrypted_digits))) # 输入处理(保留葡萄牙语提示) input_num = input("Digite um número de 4 dígitos: ") # 验证输入有效性 while len(input_num) != 4 or not input_num.isdigit(): input_num = input("Por favor, digite um número de 4 dígitos válido: ") # 执行加密并输出 print(f"Número criptografado: {encrypt(input_num)}")
适配原有match-case逻辑的说明
如果你的原有match-case是自定义数字映射(比如case 0: return 3; case 1: return 7; ...),只需修改encrypt_mapping列表的顺序即可:
- 列表的索引对应原数字,索引对应的元素就是加密后的数字
- 比如原有match-case中
0→3,则encrypt_mapping[0] = 3;1→7则encrypt_mapping[1] =7,以此类推
效率提升原因
match-case本质是分支判断,每次处理数字都要遍历匹配分支;而列表索引是直接内存寻址,无论处理多少数字,每个映射操作都是常数时间,在批量加密场景下效率提升显著。
内容的提问来源于stack exchange,提问作者DR8
相关产品推荐
相关产品推荐

