如何通过元组列表匹配替换字符串字符实现密码加密?
解决字符映射加密问题
你需要将输入字符串的每个字符,通过tup_list里的元组(第一个元素为原字符,第二个为加密符号)完成替换,核心是建立字符到加密符号的映射关系,再逐个完成替换。
现有代码的问题
flip_method逻辑错误:遍历input时,sub是单个字符(比如'c'),调用sub[1]会触发索引越界错误——单个字符没有第二个元素。- 尝试的循环逻辑错误:
x = INPUT是完整字符串,i是单个字符,x in i相当于判断完整字符串是否包含在单个字符中,永远为假,因此输出空列表。
正确实现方案:用字典建立映射(高效易扩展)
把元组列表转换成字典,利用字典的键值对快速查找对应关系,是处理这类字符映射最简洁高效的方式。
def encrypted_list(input_str='cab'): tup_list = [('a', '#'), ('b', '!'), ('c', '@')] # 将元组列表转为字典:{'a':'#', 'b':'!', 'c':'@'} char_map = {char: code for char, code in tup_list} # 遍历输入字符,查字典获取加密符号,最后拼接成字符串 encrypted_str = ''.join([char_map[char] for char in input_str]) print(encrypted_str) # 测试调用 encrypted_list() # 输出:@#!
逻辑解释
- 字典映射:
{char: code for char, code in tup_list}是字典推导式,直接将元组列表转换为键值对结构,后续扩展字母只需在tup_list中添加新元组即可。 - 逐个替换:
[char_map[char] for char in input_str]遍历输入的每个字符,通过字典快速匹配加密符号,最后用''.join()将列表拼接成完整的加密字符串。
可选容错处理
如果输入字符串包含tup_list中未定义的字符,可以用get方法避免报错,同时保留原字符:
encrypted_str = ''.join([char_map.get(char, char) for char in input_str]) # 示例:输入'cad'会输出@#d
内容的提问来源于stack exchange,提问作者Nicholas Boatwright
相关产品推荐
相关产品推荐

