Javascript 使用API和Python查找所有可能的字母组合

Javascript 使用API和Python查找所有可能的字母组合,javascript,python,html,api,scripting,Javascript,Python,Html,Api,Scripting,我正在尝试制作一个小的网络应用程序,用户输入电话号码的最后4位数字,点击提交,然后在键盘上显示使用他们的4个号码可以生成的所有单词(如果有的话)。因此,如果用户输入“2287”,他们将显示“动作”“蝙蝠”“猫””以及任何其他可以由“a/b/c”和“a/b/c”组合而成的单词,以及“t/u/v”和“p/q/r/s” 我对web应用和web脚本还不熟悉,但我已经了解了如何执行大部分相关步骤。我遇到的问题有: 创建所有可能的字母组合 找出哪些组合实际上是单词 我想你可以使用API来做一些事情,但我不知

我正在尝试制作一个小的网络应用程序,用户输入电话号码的最后4位数字,点击提交,然后在键盘上显示使用他们的4个号码可以生成的所有单词(如果有的话)。因此,如果用户输入“2287”,他们将显示“动作”蝙蝠”猫””以及任何其他可以由“a/b/c”和“a/b/c”组合而成的单词,以及“t/u/v”和“p/q/r/s

我对web应用和web脚本还不熟悉,但我已经了解了如何执行大部分相关步骤。我遇到的问题有:

  • 创建所有可能的字母组合

  • 找出哪些组合实际上是单词

  • 我想你可以使用API来做一些事情,但我不知道在哪里可以找到类似的东西。如果我使用某种排序字典API,我可以一次输入所有可能的组合,或者我必须(大约)进行81个不同的API调用,以检查每个组合是否是一个真实的单词


    很明显,我在这方面是一个相当大的傻瓜,但我正试图从这样简单的事情开始,尝试让自己熟悉服务器端web脚本。此外,如果可能的话,如果我所有的事情都是用Python完成的,那将是非常棒的,因为这是我们在我的internet应用程序类和it中使用的语言首先只使用一种语言是有意义的。无论如何,请提前感谢。

    阅读字典,只保留4个字母的单词,当用户输入数字时,按四个字母的数字代码将它们附加到defaultdict(列表)中,或者说“该数字没有单词”

    import itertools
    letters = ('',' ', 'abc','def','ghi','jkl','mno','pqrs','tuv','wxyz')
    reverse_dict = dict((str(ind), group)
                        for ind,group in enumerate(letters)
                        for c in group
                        if letters)
    
    print reverse_dict
    end_nums = '3965'
    print end_nums, 'can produce', tuple(''.join(w) for w in itertools.product(*map(reverse_dict.get, end_nums)))
    word = 'word'
    print('%r = %s' % (word,''.join(key for c in word for key, item in reverse_dict.items() if c in item)))
    

    阅读字典,只保留4个字母的单词,当用户输入数字时,将其添加到defaultdict(列表)中,并按四个字母的数字代码添加到defaultdict(列表)中,然后给他们该数字的就绪列表或说“该数字没有单词”

    import itertools
    letters = ('',' ', 'abc','def','ghi','jkl','mno','pqrs','tuv','wxyz')
    reverse_dict = dict((str(ind), group)
                        for ind,group in enumerate(letters)
                        for c in group
                        if letters)
    
    print reverse_dict
    end_nums = '3965'
    print end_nums, 'can produce', tuple(''.join(w) for w in itertools.product(*map(reverse_dict.get, end_nums)))
    word = 'word'
    print('%r = %s' % (word,''.join(key for c in word for key, item in reverse_dict.items() if c in item)))
    

    一个天真的方法是

    import itertools
    
    letters = ('','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz')
    good_words = set(['wall','base','cats'])  # etc
    
    def allWords(s):
        s = [int(ch) for ch in s.zfill(4)]
        for word in itertools.product(letters[s[0]], letters[s[1]], letters[s[2]], letters[s[3]]):
            word = ''.join(word)
            if word in good_words:
                yield word
    
    words = list(allWords('2297'))
    
    更有效的方法是将所有好词预处理到每个电话号码列表的字典中,然后只进行查找:

    import string
    import collections
    
    class CodingError(Exception):
        pass
    
    class TelephoneWords(object):
        numbers = {
            'a': '2', 'b': '2', 'c': '2', 'd': '3',
            'e': '3', 'f': '3', 'g': '4', 'h': '4',
            'i': '4', 'j': '5', 'k': '5', 'l': '5',
            'm': '6', 'n': '6', 'o': '6', 'p': '7',
            'q': '7', 'r': '7', 's': '7', 't': '8',
            'u': '8', 'v': '8', 'w': '9', 'x': '9',
            'y': '9', 'z': '9', '0': '0', '1': '1',
            '2': '2', '3': '3', '4': '4', '5': '5',
            '6': '6', '7': '7', '8': '8', '9': '9'
        }
        wordlen = 4
    
        def __init__(self, wordlist=None, fname=None):
            super(TelephoneWords,self).__init__()
            self.words = collections.defaultdict(list)
            if wordlist:
                self.addwords(wordlist)
            if fname:
                with open(fname) as inf:
                    filestr = ' '.join(inf.readlines()).replace(string.punctuation, ' ')
                    self.addwords(filestr.split())
    
        def addwords(self, words):
            _wordlen = TelephoneWords.wordlen
            _words   = self.words
            _encode  = self.encode
            for word in words:
                if len(word)==_wordlen:
                    word = word.lower()
                    try:
                        _words[_encode(word)].append(word)
                    except CodingError:
                        pass
    
        def addword(self, word):
            self.addwords((word,))
    
        def encode(self, s):
            _numbers = TelephoneWords.numbers
            res = []
            for ch in s:
                try:
                    res.append(_numbers[ch])
                except KeyError:
                    # no corresponding value found
                    raise CodingError("No value available for char '{0}'".format(ch))
            return ''.join(res)
    
        def seek(self, num):
            s = str(num).strip().zfill(TelephoneWords.wordlen)
            try:
                return self.words[s]
            except KeyError:
                raise ValueError("No words found for '{0}'".format(s))
    
        def find(self, num, onErr=None):
            try:
                return self.seek(num)
            except ValueError:
                return [] if onErr is None else onErr
    
    def main():
        tw = TelephoneWords(fname='four_letter_words.txt')
    
        for word in tw.find('2287'):
            print word
    
    if __name__=="__main__":
        main()
    
    使用拼字列表,这给了我

    acts
    bats
    baur
    cats
    caup
    

    一个天真的方法是

    import itertools
    
    letters = ('','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz')
    good_words = set(['wall','base','cats'])  # etc
    
    def allWords(s):
        s = [int(ch) for ch in s.zfill(4)]
        for word in itertools.product(letters[s[0]], letters[s[1]], letters[s[2]], letters[s[3]]):
            word = ''.join(word)
            if word in good_words:
                yield word
    
    words = list(allWords('2297'))
    
    更有效的方法是将所有好词预处理到每个电话号码列表的字典中,然后只进行查找:

    import string
    import collections
    
    class CodingError(Exception):
        pass
    
    class TelephoneWords(object):
        numbers = {
            'a': '2', 'b': '2', 'c': '2', 'd': '3',
            'e': '3', 'f': '3', 'g': '4', 'h': '4',
            'i': '4', 'j': '5', 'k': '5', 'l': '5',
            'm': '6', 'n': '6', 'o': '6', 'p': '7',
            'q': '7', 'r': '7', 's': '7', 't': '8',
            'u': '8', 'v': '8', 'w': '9', 'x': '9',
            'y': '9', 'z': '9', '0': '0', '1': '1',
            '2': '2', '3': '3', '4': '4', '5': '5',
            '6': '6', '7': '7', '8': '8', '9': '9'
        }
        wordlen = 4
    
        def __init__(self, wordlist=None, fname=None):
            super(TelephoneWords,self).__init__()
            self.words = collections.defaultdict(list)
            if wordlist:
                self.addwords(wordlist)
            if fname:
                with open(fname) as inf:
                    filestr = ' '.join(inf.readlines()).replace(string.punctuation, ' ')
                    self.addwords(filestr.split())
    
        def addwords(self, words):
            _wordlen = TelephoneWords.wordlen
            _words   = self.words
            _encode  = self.encode
            for word in words:
                if len(word)==_wordlen:
                    word = word.lower()
                    try:
                        _words[_encode(word)].append(word)
                    except CodingError:
                        pass
    
        def addword(self, word):
            self.addwords((word,))
    
        def encode(self, s):
            _numbers = TelephoneWords.numbers
            res = []
            for ch in s:
                try:
                    res.append(_numbers[ch])
                except KeyError:
                    # no corresponding value found
                    raise CodingError("No value available for char '{0}'".format(ch))
            return ''.join(res)
    
        def seek(self, num):
            s = str(num).strip().zfill(TelephoneWords.wordlen)
            try:
                return self.words[s]
            except KeyError:
                raise ValueError("No words found for '{0}'".format(s))
    
        def find(self, num, onErr=None):
            try:
                return self.seek(num)
            except ValueError:
                return [] if onErr is None else onErr
    
    def main():
        tw = TelephoneWords(fname='four_letter_words.txt')
    
        for word in tw.find('2287'):
            print word
    
    if __name__=="__main__":
        main()
    
    使用拼字列表,这给了我

    acts
    bats
    baur
    cats
    caup
    

    这很有帮助,我正在努力学习python库,这很有帮助。谢谢伙计。这很有帮助,我正在努力学习python库,这很有帮助。谢谢伙计。这也很有帮助。我不知道你可以用这些语言做很多事。谢谢这里。这也很有帮助。其他e是如此之多,我不知道你能用这些语言。这里也谢谢你。