Anagram 不匹配(要列出的字符串),Python

Anagram not matching up (string to list), Python

我正在尝试制作一个脚本,我可以在其中输入任何单词的变位词,它会从字典中读取以查看是否存在匹配项 (ex. estt returns:= unjumble words: test)

如果有两个匹配,它会写 (ex. estt returns: 有多个匹配: test, sett(假设sett是一个词 lol)

我什至无法进行一场比赛,一直返回 "no match" 即使如果我查看根据字典制作的列表,我会看到这些词。

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

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_list 中没有变位词一样。发生什么事了?

您在循环中进行一次检查后就中断了,请删除 break 以获取所有字谜:

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.permutations:

from itertools import permutations
def anagrams(s):
  return ("".join(p) for p in permutations(s))

输出:

unjumble words here: onaacir
aaronic

在您的 Anagrams 函数中,您在完成外循环之前返回,因此缺少许多排列:

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

现在,在两次更改之后,您的代码就可以工作了