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

2018-03-05 23:34:30 +08:00
 dreampython

问题 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(c) for c in stored_characters)
    digits = tuple(ord(c) 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)
2170 次点击
所在节点    Python
2 条回复
dreampython
2018-03-08 19:33:40 +08:00
自问自答(个人理解):
问题 1:将 first_letters 放在前面是问题 2 的伏笔
问题 2:排除前 n 个元素含有 zero 的排列,就是排除问题 1 中被排在前面的 first_letters 这些字符对应的数字不能为 0
myhyperion
2018-03-16 16:28:46 +08:00
我已有这个疑问,后来发现
<code>
>>> 01+1==2
SyntaxError: invalid token
</code>

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/435143

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX