Python中《Dive into python3》alphametics.py 代码请教

问题 1:为什么要按照以下顺序组合字母,stored_characters = ''.join(unique_characters)行不行,只是顺序不同

stored_characters = ''.join(first_letters) +  \
    ''.join(unique_characters - first_letters) 

问题 2: 为什么要排除前 n 个元素含有 zero 的排列?

if zero not in guess[:n]: 

代码如下:

import re
import itertools

def solve(puzzle): words = re.findall(’[A-Z]+’, puzzle.upper()) unique_characters = set(’’.join(words)) assert len(unique_characters) <= 10, ‘Too many letters’ first_letters = {word[0] for word in words} n = len(first_letters) stored_characters = ‘’.join(first_letters) +
‘’.join(unique_characters - first_letters) characters = tuple(ord© for c in stored_characters) digits = tuple(ord© for c in ‘0123456789’) zero = digits[0] for guess in itertools.permutations(digits, len(characters)): if zero not in guess[:n]: equation = puzzle.translate(dict(zip(characters,guess))) if eval(equation): return equation if name == ‘main’: import sys for puzzle in sys.argv[1:]: print(puzzle) solution = solve(puzzle) if solution: print(solution)


Python中《Dive into python3》alphametics.py 代码请教

1 回复

自问自答(个人理解):
问题 1:将 first_letters 放在前面是问题 2 的伏笔
问题 2:排除前 n 个元素含有 zero 的排列,就是排除问题 1 中被排在前面的 first_letters 这些字符对应的数字不能为 0

回到顶部