参考《深入python3》源码
用穷举法求解字母算式 'SDNF+OENX==NOQA'
#!/usr/bin/evn python3
# -*- coding:utf-8 -*-
import itertools
import re
s = 'SDNF+OENX==NOQA'
# 找出算式中的所有首字母,首字母不能为0
first_char_list = [i[0] for i in re.sub('[^A-Z]',' ',s).split()]
chars = set(re.findall(r'[A-Z]',s))
assert len(chars)<10,'非法输入'
# 获得所有组合迭代器
perms = itertools.permutations("0123456789",len(chars))
for guess in perms:
# 生成翻译字典
trans_dic = dict(zip(list(ord(x) for x in chars),list(ord(x) for x in guess)))
# 排除首字母赋值为0的情况
test = [trans_dic[ord(i)] for i in first_char_list]
if ord('0') in test:
continue
if eval(s.translate(trans_dic)):
print(s.translate(trans_dic))
print({chr(key):chr(value) for key,value in trans_dic.items()})