试图过滤人工智能的字典

时间:2017-03-18 02:39:10

标签: python python-3.x dictionary

大家好,我正在上课,我们的任务之一就是创建一个Hangman AI。这个任务有两个部分,目前我被困在第一个任务上,即,给定了刽子手谜题的状态,以及作为字典的单词列表,从字典中过滤掉谜题的不可能答案。举个例子,如果给出的拼图是t-t,那么我们应该过滤掉所有不是4个字母的单词。接下来,我们应该过滤掉没有t作为第一个和最后一个字母的单词(即帐篷和测试是可接受的,但应删除类型和帮助)。目前,由于某种原因,我的代码似乎从字典中删除所有条目,我不知道为什么。非常感谢帮助。我还附上了我的代码以供参考。

def过滤器(自我,拼图):

wordlist = dictionary.getWords()

newword = {i : wordlist[i] for i in range(len(wordlist)) if len(wordlist[i])==len(str(puzzle))}

string = puzzle.getState()

array = []
for i in range(len(newword)):
    n = newword[i]
    for j in range(len(string)):
        if string[j].isalpha() and n[j]==string[j]:
            continue
        elif not string[j].isalpha():
            continue
        else:
            array+=i
            print(i)
            break
array = list(reversed(array))
for i in array:
    del newword[i]

其他一些信息:

puzzle.getState()是一个给我们的函数,它返回一个描述拼图状态的字符串,例如。 a-a ---或t --- t-或elepha -

dictionary.getWords实质上是从单词列表中创建一个字典

谢谢!

2 个答案:

答案 0 :(得分:1)

这一行

newword = {i : wordlist[i] for i in range(len(wordlist)) if len(wordlist[i])==len(str(puzzle))}

创建一个包含非连续键的字典。您只需要与puzzle长度相同的字词,因此如果wordlist['test', 'type', 'string', 'tent']puzzle为4个字母,则newword{0:'test', 1:'type', 3:'tent'} }。然后使用for i in range(len(newword)):根据字典的长度迭代字典。我有点惊讶你没有用你的代码写出KeyError。

我没有其他代码就无法测试,但我认为将循环更改为:

for i in newword.keys():

会有所帮助。

答案 1 :(得分:1)

这可能有点晚,但使用正则表达式:

import re

def remove(regularexpression, somewords):
    words_to_remove=[]
    for word in somewords:
       #if not re.search(regularexpression, word):
        if re.search(regularexpression, word)==None:
            words_to_remove.append(word)
    for word in words_to_remove:
            somewords.remove(word)

例如,您有列表words=['hello', 'halls', 'harp', 'heroic', 'tests']

您现在可以: remove('h[a-zA-Z]{4}$', words)words将成为['hello', 'halls'],而remove('h[a-zA-Z]{3}s$', words)仅将words留给['halls']