字谜不匹配(字符串到列表),Python

字谜不匹配(字符串到列表),Python,python,python-3.x,anagram,Python,Python 3.x,Anagram,我正在尝试制作一个脚本,在那里我可以输入任何单词的字谜,它会从字典中读取,看看是否有匹配 例如,estt返回:=取消单词拼写:test 如果有两个匹配项,它将写入 例如,estt返回:有多个匹配项:test,settassuming sett是一个单词lol 我甚至连一个匹配词都查不出来,总是不返回匹配词,即使我看了字典里的单词列表,我还是看到了这些单词 这是我到目前为止写的代码 def anagrams(s): if s =="": return [s] els

我正在尝试制作一个脚本,在那里我可以输入任何单词的字谜,它会从字典中读取,看看是否有匹配 例如,estt返回:=取消单词拼写:test

如果有两个匹配项,它将写入 例如,estt返回:有多个匹配项:test,settassuming sett是一个单词lol

我甚至连一个匹配词都查不出来,总是不返回匹配词,即使我看了字典里的单词列表,我还是看到了这些单词

这是我到目前为止写的代码

def anagrams(s):
    if s =="":
        return [s]
    else:
        ans = []
        for w in anagrams(s[1:]):
            for pos in range(len(w)+1):
                ans.append(w[:pos]+s[0]+w[pos:])
            return ans

dic_list = []
def dictionary(filename):
    openfile = open(filename,"r")
    read_file = openfile.read()
    lowercase = read_file.lower()
    split_words = lowercase.split()
    for words in split_words:
        dic_list.append(words)

def main():
    dictionary("words.txt")
    anagramsinput = anagrams(input("unjumble words here: "))
    for anagram in anagramsinput:
        if anagram in dic_list:
            print(anagram)
        else:
            print("no match")
            break

这就好像字谜不在dic_列表中一样。发生了什么事?

在循环中执行一次检查后,您正在中断,请删除中断以获取所有的字谜:

def main():
    dictionary("words.txt")
    anagramsinput = anagrams(input("unjumble words here: "))
    for anagram in anagramsinput:
        if anagram in dic_list: # don't break, loop over every possibility
            print(anagram) 
如果不想打印“不匹配”,只需将其删除即可。如果您希望所有可能的字母排列,请使用itertools。排列:

def anagrams(s):
    if s =="":
        return [s]
    else:
        ans = []
        for w in anagrams(s[1:]):
            for pos in range(len(w)+1):
                ans.append(w[:pos]+s[0]+w[pos:])
        return ans # only return when both loops are done
输出:

unjumble words here: onaacir
aaronic
在字谜函数中,您在完成外循环之前返回,因此缺少许多排列:

def anagrams(s):
    if s =="":
        return [s]
    else:
        ans = []
        for w in anagrams(s[1:]):
            for pos in range(len(w)+1):
                ans.append(w[:pos]+s[0]+w[pos:])
        return ans # only return when both loops are done

现在,在两次更改之后,您的代码将正常工作

我们可以看到单词了吗。txtI将其设置得非常小。您是否验证了dic_列表是否包含正确的值?您使用了什么输入字进行测试?anagramsinput应该是什么?我不认为你的字谜功能能达到你的预期,我不希望它打印5次不匹配,如果我输入一个可以被置乱5次的单词。如果我不休息,我还是会被拒绝match@Archie. 你在第一次迭代中打破了循环,不管是什么原因,也许我可以先把结果列出来。然后在之后执行另一个不匹配语句。我仍然无法让代码正常工作,它什么也得不到。我添加了使用置换功能运行它的输出。所以,如果在插入置换代码时它能正常工作,这意味着问题在于我的字谜:函数正确吗?我正在尝试修复它,而不是跳转到另一种方法。对不起,我还是个初学者。