Python中使用循环和字典实现字符串转Leetspeak的组合生成问题
问题原因
你当前的代码存在两个核心问题:
- 每次替换字符时直接修改原列表的对应位置,后续替换会覆盖之前的结果,且没有将每次生成的有效Leet字符串存入结果列表
- 映射字典的value类型不统一,
'e'对应的是字符串'3','a'对应的是列表,遍历逻辑会出现异常
修正方案
你可以用itertools.product生成所有替换组合的笛卡尔积,实现全量结果输出:
from itertools import product # 统一映射值为列表类型,避免遍历异常 mapping = {'a': ['4', '@', '^'], 'e': ['3']} # 避免使用input作为变量名,会覆盖Python内置的input()函数 input_str = 'stack overflow' # 整理每个字符对应的所有可选替换项 char_options = [] for char in input_str: if char in mapping: char_options.append(mapping[char]) else: # 不在映射规则内的字符只有一种选择:保留本身 char_options.append([char]) # 生成所有替换组合的笛卡尔积 all_combinations = product(*char_options) # 把所有组合转换为字符串存入结果列表 result = [] for combo in all_combinations: result.append(''.join(combo)) # 按你要求的格式输出空格拼接的结果 print(' '.join(result))
输出结果
运行后会得到你预期的输出:
st4ck ov3rflow st@ck ov3rflow st^ck ov3rflow
内容的提问来源于stack exchange,提问作者Marc A
相关产品推荐
相关产品推荐

