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

如何用列表优化Python 4位数字加密函数?

4位数字加密函数的列表循环优化实现

核心优化思路

用预定义映射列表替代match-case的分支判断,结合循环(或列表推导式)批量处理每位数字,核心逻辑如下:

  1. 拆分输入的4位数字为单个数字的列表,便于逐个处理
  2. 用列表存储数字到加密后数字的映射——列表索引访问是O(1)常数时间,远快于match-case的分支判断
  3. 循环遍历数字列表,通过映射列表完成加密转换
  4. 按需执行加密规则中的位置交换(如果原有规则包含此步骤)
  5. 将处理后的数字列表拼接为最终加密结果

完整代码实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:31:08